def restore_albums(): contents = flask.request.form.get('text', '') try: url = links.scrape_links_from_text(contents)[0] queued.deferred_fetch_and_restore.delay(url) except IndexError: flask.abort(401) return 'Restore request sent...', 200
def restore_albums(): contents = flask.request.form.get('text', '') try: url = links.scrape_links_from_text(contents)[0] queued.deferred_fetch_and_restore.delay(url) except IndexError: flask.abort(401) return 'Restore request sent...', 200
def scrape_artist(): form_data = flask.request.form contents = form_data.get('text', '') response = None if 'silence' in form_data else form_data.get('response_url') for url in links.scrape_links_from_text(contents): if 'bandcamp' in url: flask.current_app.logger.info(f'[scraper]: scraping albums from {url}') queued.deferred_consume_artist_albums.delay(url, response) return 'Scrape request sent', 200
def scrape_album(): form_data = flask.request.form for url in links.scrape_links_from_text(form_data.get('url', '')): flask.current_app.logger.info(f'[api]: scraping {url}...') queued.deferred_consume.delay( url, bandcamp.scrape_bandcamp_album_ids_from_url_forced, list_model.add_to_list, ) return 'OK', 200
def scrape_album(): form_data = flask.request.form for url in links.scrape_links_from_text(form_data.get('url', '')): flask.current_app.logger.info(f'[api]: scraping {url}...') queued.deferred_consume.delay( url, bandcamp.scrape_bandcamp_album_ids_from_url_forced, list_model.add_to_list, ) return 'OK', 200
def scrape_artist(): form_data = flask.request.form contents = form_data.get('text', '') response = None if 'silence' in form_data else form_data.get( 'response_url') for url in links.scrape_links_from_text(contents): if 'bandcamp' in url: flask.current_app.logger.info( f'[scraper]: scraping albums from {url}') queued.deferred_consume_artist_albums.delay(url, response) return 'Scrape request sent', 200
def scrape_urls(): form_data = flask.request.form channel = form_data.get('channel_name', 'chat') contents = form_data.get('text', '') for url in links.scrape_links_from_text(contents): queued.deferred_consume.delay( url, bandcamp.scrape_bandcamp_album_ids_from_url_forced, list_model.add_to_list, channel=channel, slack_token=slack_blueprint.config['SLACK_OAUTH_TOKEN']) return 'Scrape request sent', 200
def handle_message_action(payload): try: if 'scrape_action' in payload['callback_id']: contents = payload['message']['text'] channel_id = payload['channel']['id'] for url in links.scrape_links_from_text(contents): queued.deferred_consume.delay( url, bandcamp.scrape_bandcamp_album_ids_from_url_forced, list_model.add_to_list, channel=channel_id, slack_token=slack_blueprint.config['SLACK_OAUTH_TOKEN'] ) response = { 'response_type': 'ephemeral', 'text': f'Scraping message for albums to add to the {slack_blueprint.config["LIST_NAME"]}...', 'replace_original': False, 'unfurl_links': False, } requests.post(payload['response_url'], data=json.dumps(response)) elif 'more_action' in payload['callback_id']: url = next(links.scrape_links_from_attachments([payload['message']])) album = albums_model.get_album_details_by_url(url) if album: random_tag_to_use = random.choice(album.tags) first_result = next(albums_model.search_albums_by_tag(random_tag_to_use)) slack = slacker.Slacker(slack_blueprint.config['SLACK_OAUTH_TOKEN']) slack.chat.post_message(payload['user']['id'], f'Your requested similar album: {first_result.album_url}', unfurl_links=True) else: flask.current_app.logger.warn(f'[slack]: unable to find album by url: {url}') elif 'add_mine' in payload['callback_id']: url = next(links.scrape_links_from_attachments([payload['message']])) album = albums_model.get_album_details_by_url(url) if album: albums_model.add_user_to_album(album.album_id, payload['user']['id']) flask.current_app.logger.info(f'[slack]: added user to album') response = { 'response_type': 'ephemeral', 'text': 'Added album to your list.', 'replace_original': False, 'unfurl_links': False, 'attachments': build_my_list_attachment(), } requests.post(payload['response_url'], data=json.dumps(response)) else: flask.current_app.logger.warn(f'[slack]: unable to find album by url: {url}') except StopIteration: flask.current_app.logger.warn(f'[slack]: no URL found in message') except KeyError as missing_key: flask.current_app.logger.warn(f'[slack]: missing key in action payload: {missing_key}') return '', 200
def scrape_urls(): form_data = flask.request.form channel = form_data.get('channel_name', 'chat') contents = form_data.get('text', '') for url in links.scrape_links_from_text(contents): queued.deferred_consume.delay( url, bandcamp.scrape_bandcamp_album_ids_from_url_forced, list_model.add_to_list, channel=channel, slack_token=slack_blueprint.config['SLACK_OAUTH_TOKEN'] ) return 'Scrape request sent', 200
def scrape_bandcamp_album_ids_from_messages(messages, do_requests=True): for message in messages: if message.get('type') == 'message': if 'attachments' in message: for album_id in scrape_bandcamp_album_ids_from_attachments(message): yield str(album_id) elif do_requests: try: for url in links.scrape_links_from_text(message['text']): if 'bandcamp' in url: yield str(scrape_bandcamp_album_ids_from_url(url)) except (ValueError, KeyError, NotFoundError): continue
def scrape_bandcamp_album_ids_from_messages(messages, do_requests=True): for message in messages: if message.get('type') == 'message': if 'attachments' in message: for album_id in scrape_bandcamp_album_ids_from_attachments( message): yield str(album_id) elif do_requests: try: for url in links.scrape_links_from_text(message['text']): if 'bandcamp' in url: yield str(scrape_bandcamp_album_ids_from_url(url)) except (ValueError, KeyError, NotFoundError): continue
def add_review(): form_data = flask.request.form user = form_data.get('user_id') contents = form_data.get('text', '') response = None if 'silence' in form_data else form_data.get( 'response_url') try: album_url = links.scrape_links_from_text(contents)[0] review = contents.split(album_url)[-1].strip() queued.deferred_add_review_to_album.delay( album_url=album_url, user_id=user, review=review, response_url=response, ) except IndexError: flask.abort(401) return 'Review request sent...', 200
def handle_message_action(payload): try: if 'scrape_action' in payload['callback_id']: contents = payload['message']['text'] channel_id = payload['channel']['id'] for url in links.scrape_links_from_text(contents): queued.deferred_consume.delay( url, bandcamp.scrape_bandcamp_album_ids_from_url_forced, list_model.add_to_list, channel=channel_id, slack_token=slack_blueprint.config['SLACK_OAUTH_TOKEN']) response = { 'response_type': 'ephemeral', 'text': f'Scraping message for albums to add to the {slack_blueprint.config["LIST_NAME"]}...', 'replace_original': False, 'unfurl_links': False, } requests.post(payload['response_url'], data=json.dumps(response)) elif 'more_action' in payload['callback_id']: url = next( links.scrape_links_from_attachments([payload['message']])) album = albums_model.get_album_details_by_url(url) if album: random_tag_to_use = random.choice(album.tags) first_result = next( albums_model.search_albums_by_tag(random_tag_to_use)) slack = slacker.Slacker( slack_blueprint.config['SLACK_OAUTH_TOKEN']) slack.chat.post_message( payload['user']['id'], f'Your requested similar album: {first_result.album_url}', unfurl_links=True) else: flask.current_app.logger.warn( f'[slack]: unable to find album by url: {url}') elif 'add_mine' in payload['callback_id']: url = next( links.scrape_links_from_attachments([payload['message']])) album = albums_model.get_album_details_by_url(url) if album: albums_model.add_user_to_album(album.album_id, payload['user']['id']) flask.current_app.logger.info(f'[slack]: added user to album') response = { 'response_type': 'ephemeral', 'text': 'Added album to your list.', 'replace_original': False, 'unfurl_links': False, 'attachments': build_my_list_attachment(), } requests.post(payload['response_url'], data=json.dumps(response)) else: flask.current_app.logger.warn( f'[slack]: unable to find album by url: {url}') except StopIteration: flask.current_app.logger.warn(f'[slack]: no URL found in message') except KeyError as missing_key: flask.current_app.logger.warn( f'[slack]: missing key in action payload: {missing_key}') return '', 200