Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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
Пример #8
0
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
Пример #9
0
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
Пример #10
0
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
Пример #11
0
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
Пример #12
0
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
Пример #13
0
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