Compare commits

...

5 Commits

4 changed files with 20 additions and 4 deletions

View File

@ -176,6 +176,7 @@ def callback():
params = request.get_json()
if 'source' not in params and 'itemid' not in params:
logger.error("Bad request params: {}".format(params))
logger.info('Executing callback for {}/{}'.format(params['source'], params['itemid']))
sources.item_callback(params['source'], params['itemid'])
return jsonify({})

View File

@ -28,7 +28,7 @@ def command_test(args):
)
for sf_name, sf_sources
in subfeeds.items()
)
) if subfeeds else ''
print(f'Inquisitor configured from {config_path}')
print(f' {CONFIG_DATA} = {data_path}')
print(f' {CONFIG_SOURCES} = {source_path}')

View File

@ -104,6 +104,8 @@ class LinearCrawler:
class RedditScraper:
"""
An engine for generating items from subreddits.
Requires defining source, subreddit_name
fetch new with RedditScraper.fetch_new(state, __name__, reddit)
"""
@staticmethod
def fetch_new(state, name, reddit):
@ -170,7 +172,7 @@ class RedditScraper:
def get_body(self, post):
parts = []
if not post.is_self:
parts.append(f'<a href="{post.url}">link post</a>')
parts.append(f'<i>link:</i> <a href="{post.url}">{post.url}</a>')
if hasattr(post, 'preview'):
try:
previews = post.preview['images'][0]['resolutions']
@ -179,6 +181,17 @@ class RedditScraper:
parts.append(f'<img src="{preview["url"]}">')
except:
pass
if getattr(post, 'is_gallery', False):
try:
for gallery_item in post.gallery_data['items']:
media_id = gallery_item['media_id']
metadata = post.media_metadata[media_id]
small_previews = [p for p in metadata['p'] if p['x'] < 800]
preview = sorted(small_previews, key=lambda p:-p['x'])[0]
parts.append(f'<i>link:</i> <a href="{metadata["s"]["u"]}">{metadata["s"]["u"]}</a>')
parts.append(f'<img src="{preview["u"]}">')
except:
pass
if post.selftext:
limit = post.selftext[1024:].find(' ')
preview_body = post.selftext[:1024 + limit]

View File

@ -28,6 +28,7 @@
.item-info { color: rgba(0, 0, 0, 0.7); }
.readable-item img { max-width: 100%; }
button, summary { cursor: pointer; }
summary { display: block; }
summary:focus { outline: 1px dotted gray; }
.strikethru span, .strikethru p { text-decoration: line-through; }
.fade span, .fade p { color: rgba(0, 0, 0, 0.2); }
@ -76,10 +77,11 @@
body: JSON.stringify({items: items}),
})
.then(function () {
location.reload()
location.reload();
});
};
var callback = function (source, itemid) {
document.getElementById(source + "-" + itemid + "-callback").disabled = true;
fetch('/callback/', {
method: 'POST',
headers: {
@ -107,7 +109,7 @@
<p>{{item.body|safe}}</p>
{% endif %}
{% if item.callback %}
<p><button onclick="javascript:callback('{{item.source}}', '{{item.id}}')">Callback</button></p>
<p><button id="{{item.source}}-{{item.id}}-callback" onclick="javascript:callback('{{item.source}}', '{{item.id}}')">Callback</button></p>
{% endif %}
</details>
{% else %}<span class="item-title">{{item.title}}</span><br>