def on_task_input(self, task, config): from flexget.plugins.local.friendfeed2 import FriendFeed, fetch_installed_app_access_token consumer_token = {'key': config['app_key'], 'secret': config['app_secret']} access_token = fetch_installed_app_access_token(consumer_token, config['username'], config['password']) ff = FriendFeed(oauth_consumer_token=consumer_token, oauth_access_token=access_token) try: feed = ff.fetch('/entry', id=','.join(config['posts']), raw=1, maxcomments=10000, maxlikes=0) except Exception as err: raise plugin.PluginError('Fetch() failed: %s' % err) if not feed or not feed.get('entries', []): raise plugin.PluginError('No posts data returned!') entries = [] for post in feed['entries']: title = post['rawBody'] title = (title[:47] + '...') if len(title) > 47 else title if not post.get('comments', []): log.verbose('No comments found on entry "%s"' % title) continue log.verbose('Emitting comments for entry "%s"...' % title) for comm in post['comments']: entry = Entry() entry['title'] = entry['url'] = comm['id'] entry['post_url'] = post['url'] entry['post_title'] = title entry['post_author'] = post['from']['name'] entry['comment_body'] = comm['rawBody'] entry['comment_author'] = comm['from']['name'] entries.append(entry) log.verbose('Found %d comment(s) on %d post(s).' % (len(entries), len(feed['entries']))) return entries
def on_task_input(self, task, config): from flexget.plugins.local.friendfeed2 import FriendFeed, fetch_installed_app_access_token consumer_token = { 'key': config['app_key'], 'secret': config['app_secret'] } access_token = fetch_installed_app_access_token( consumer_token, config['username'], config['password']) ff = FriendFeed(oauth_consumer_token=consumer_token, oauth_access_token=access_token) try: feed = ff.fetch('/entry', id=','.join(config['posts']), raw=1, maxcomments=10000, maxlikes=0) except Exception as err: raise plugin.PluginError('Fetch() failed: %s' % err) if not feed or not feed.get('entries', []): raise plugin.PluginError('No posts data returned!') entries = [] for post in feed['entries']: title = post['rawBody'] title = (title[:47] + '...') if len(title) > 47 else title if not post.get('comments', []): log.verbose('No comments found on entry "%s"' % title) continue log.verbose('Emitting comments for entry "%s"...' % title) for comm in post['comments']: entry = Entry() entry['title'] = entry['url'] = comm['id'] entry['post_url'] = post['url'] entry['post_title'] = title entry['post_author'] = post['from']['name'] entry['comment_body'] = comm['rawBody'] entry['comment_author'] = comm['from']['name'] entries.append(entry) log.verbose('Found %d comment(s) on %d post(s).' % (len(entries), len(feed['entries']))) return entries
def on_task_output(self, task, config): if not task.accepted: log.debug('nothing accepted, aborting') return rooms = [s.encode('utf8').lower() for s in config.get('feeds', [])] if task.options.test: log.info('Test posting to feed(s): ' + ','.join(rooms)) else: from flexget.plugins.local.friendfeed2 import FriendFeed, fetch_installed_app_access_token consumer_token = {'key': config['app_key'], 'secret': config['app_secret']} access_token = fetch_installed_app_access_token(consumer_token, config['username'], config['password']) ff = FriendFeed(oauth_consumer_token=consumer_token, oauth_access_token=access_token) if config['mode'] == 'posts': for entry in task.accepted: try: fftext = entry.render(config['text']) fflink = entry.render(config['link']) if 'link' in config else None ffcomm = entry.render(config['comment']) if 'comment' in config else None ffpict = entry.render(config['image']) if 'image' in config else None except RenderError as e: log.error('Error rendering data: %s' % e) if task.options.test: log.info('Test run for entry ' + entry['title']) log.info('- Text would be: ' + fftext) if fflink: log.info('- Link would be: ' + fflink) if ffpict: log.info('- Image would be: ' + ffpict) if ffcomm: log.info('- Comment would be: ' + ffcomm) else: try: res = ff.post_entry(fftext, link=fflink, comment=ffcomm, to=','.join(rooms), image_url=ffpict) log.info('Published id: %s' % res['id']) except Exception as err: log.info('post_entry() failed with %s' % str(err)) else: if not config.get('comment'): raise plugin.PluginError('"comment" option is required when "mode"=="comments".') try: fftext = render_from_task(config['text'], task) fflink = render_from_task(config['link'], task) if 'link' in config else None ffpict = render_from_task(config['image'], task) if 'image' in config else None except RenderError as e: log.error('Error rendering data: %s' % e) if task.options.test: log.info('Test run for task.') log.info('- Text would be: ' + fftext) if fflink: log.info('- Link would be: ' + fflink) if ffpict: log.info('- Image would be: ' + ffpict) else: res = ff.post_entry(fftext, link=fflink, to=','.join(rooms), image_url=ffpict) log.info('Published id: %s' % res['id']) for entry in task.accepted: try: ffcomm = entry.render(config['comment']) except RenderError as e: log.error('Error rendering data: %s' % e) if task.options.test: log.info('- Comment would be: ' + ffcomm) else: try: time.sleep(1) rcm = ff.post_comment(res['id'], ffcomm) log.verbose('Published comment id: %s' % rcm['id']) except Exception as err: log.info('post_comment() failed with %s' % str(err))