示例#1
0
def topic_media(topics_id):
    if access_public_topic(topics_id):
        media_list = topic_media_list(TOOL_API_KEY, topics_id, snapshots_id=None, timespans_id=None, foci_id=None, sort=None, limit=None, link_id=None)
    elif is_user_logged_in():
        media_list = topic_media_list(user_mediacloud_key(), topics_id)
    else:
        return jsonify({'status': 'Error', 'message': 'Invalid attempt'})

    return jsonify(media_list)
示例#2
0
def topic_media(topics_id):
    if access_public_topic(topics_id):
        media_list = apicache.topic_media_list(TOOL_API_KEY, topics_id, snapshots_id=None, timespans_id=None,
                                               foci_id=None, sort=None, limit=None, link_id=None)
    elif is_user_logged_in():
        media_list = apicache.topic_media_list(user_mediacloud_key(), topics_id)
    else:
        return jsonify({'status': 'Error', 'message': 'Invalid attempt'})

    return jsonify(media_list)
示例#3
0
def _stream_media_list_csv(user_mc_key, filename, topics_id, **kwargs):
    # Helper method to stream a list of media back to the client as a csv.  Any args you pass in will be
    # simply be passed on to a call to topicMediaList.
    all_media = []
    more_media = True
    params = kwargs
    params[
        'limit'] = 1000  # an arbitrary value to let us page through with big pages
    try:

        while more_media:
            page = apicache.topic_media_list(user_mediacloud_key(), topics_id,
                                             **params)
            media_list = page['media']

            all_media = all_media + media_list

            if 'next' in page['link_ids']:
                params['link_id'] = page['link_ids']['next']
                more_media = True
            else:
                more_media = False

        return csv.download_media_csv(all_media, filename,
                                      TOPIC_MEDIA_CSV_PROPS)
    except Exception as exception:
        return json.dumps({'error': str(exception)},
                          separators=(',', ':')), 400
示例#4
0
def media(topics_id, media_id):
    user_mc = user_admin_mediacloud_client()
    combined_media_info = apicache.topic_media_list(user_mediacloud_key(), topics_id, media_id=media_id)['media'][0]
    media_info = user_mc.media(media_id)
    for key in list(media_info.keys()):
        if key not in list(combined_media_info.keys()):
            combined_media_info[key] = media_info[key]
    return jsonify(combined_media_info)
示例#5
0
def media(topics_id, media_id):
    user_mc = user_admin_mediacloud_client()
    combined_media_info = topic_media_list(user_mediacloud_key(), topics_id, media_id=media_id)['media'][0]
    media_info = user_mc.media(media_id)
    for key in media_info.keys():
        if key not in combined_media_info.keys():
            combined_media_info[key] = media_info[key]
    return jsonify(combined_media_info)
示例#6
0
def _generate_network_of_frames(topics_id, timespans_id, num_of_sources, out_name, top_media_sort,
                                remove_media_list=None, remove_word_list=[], generate_word_lists=False,
                                include_media_list=None, media_attribs=None, num_words=None):
    
    if remove_media_list is None:
        remove_media_list = []

# use this specify attributes on the media source that should be added to the node as attributes        
#     if(media_attribs == None):
#         media_attribs = {}
        
    if include_media_list is None:
        media_sources_md = topic_media_list(user_mediacloud_key(), topics_id, timespans_id=timespans_id,
                                 limit=num_of_sources + len(remove_media_list), sort=top_media_sort)['media']
    else:
        media_sources_md = include_media_list

    if remove_media_list is not None:
        for r in remove_media_list:
            media_sources_md = _remove_media_source(r, media_sources_md)

    top_words = _build_top_words(media_sources_md, topics_id, timespans_id, remove_word_list, num_words)
    if remove_word_list is not None:
        top_words = _clean_top_words(top_words, remove_word_list)

    frame_network = _build_network(top_words, media_sources_md, media_attribs)

    _export_gexf_network(frame_network, '%s.gexf' % out_name)
    _export_d3_network(frame_network, '%s' % out_name)
    
    if generate_word_lists:
        with open('%s.txt' % out_name, 'w', encoding="utf-8") as wl:
            all_words = []
            media_sources = {ms['media_id']: ms['name'] for ms in media_sources_md}
            # counts = {}
            for ms in top_words:
                # wl.write("\n\n%s (media id: %d):\n" % (media_sources[ms].encode('ascii', 'ignore'), ms))
                wl.write("\n\n{} (media id: {}):\n".format(media_sources[ms], ms))
                for w in top_words[ms]:
                    all_words.append(w['term'])

                    # increment count to see how many media source include each word
                    # counts[ms]

                    # wl.write("- %s (%d)\n" % (w['term'].encode('ascii', 'ignore'), w['count']))
                    wl.write("- {} ({})\n".format(w['term'], w['count']))
                wl.write("\n")
    
    linefeed = chr(10)  # linefeed=\n
    s = linefeed.join(nx.generate_gexf(frame_network))  # doctest: +SKIP
    # for line in nx.generate_gexf(frame_network):  # doctest: +SKIP
    #     logger.debug line

    return s
示例#7
0
def _stream_media_list_csv(user_mc_key, filename, topics_id, **kwargs):
    # Helper method to stream a list of media back to the client as a csv.  Any args you pass in will be
    # simply be passed on to a call to topicMediaList.
    add_metadata = False  # off for now because this is SUPER slow
    all_media = []
    more_media = True
    params = kwargs
    params[
        'limit'] = 1000  # an arbitrary value to let us page through with big pages
    try:
        cols_to_export = TOPICS_TEMPLATE_PROPS
        if not add_metadata:
            cols_to_export = cols_to_export[:-4]  # remove the metadata cols

        while more_media:
            page = apicache.topic_media_list(user_mediacloud_key(), topics_id,
                                             **params)
            media_list = page['media']
            user_mc = user_admin_mediacloud_client()

            if add_metadata:
                for media_item in media_list:
                    media_info = user_mc.media(media_item['media_id'])
                    for eachItem in media_info['media_source_tags']:
                        if is_metadata_tag_set(eachItem['tag_sets_id']):
                            format_metadata_fields(media_item, eachItem)

            all_media = all_media + media_list

            if 'next' in page['link_ids']:
                params['link_id'] = page['link_ids']['next']
                more_media = True
            else:
                more_media = False

        return csv.download_media_csv(all_media, filename, cols_to_export)
    except Exception as exception:
        return json.dumps({'error': str(exception)},
                          separators=(',', ':')), 400
示例#8
0
def _stream_media_list_csv(user_mc_key, filename, topics_id, **kwargs):
    # Helper method to stream a list of media back to the client as a csv.  Any args you pass in will be
    # simply be passed on to a call to topicMediaList.
    all_media = []
    more_media = True
    params = kwargs
    params['limit'] = 1000  # an arbitrary value to let us page through with big pages
    try:

        while more_media:
            page = apicache.topic_media_list(user_mediacloud_key(), topics_id, **params)
            media_list = page['media']

            all_media = all_media + media_list

            if 'next' in page['link_ids']:
                params['link_id'] = page['link_ids']['next']
                more_media = True
            else:
                more_media = False

        return csv.download_media_csv(all_media, filename, TOPIC_MEDIA_CSV_PROPS)
    except Exception as exception:
        return json.dumps({'error': str(exception)}, separators=(',', ':')), 400
示例#9
0
def topic_provider_media(topics_id):
    media_list = apicache.topic_media_list(user_mediacloud_key(), topics_id)
    return jsonify(media_list)
示例#10
0
def _generate_network_of_frames(topics_id,
                                timespans_id,
                                num_of_sources,
                                out_name,
                                top_media_sort,
                                remove_media_list=None,
                                remove_word_list=[],
                                generate_word_lists=False,
                                include_media_list=None,
                                media_attribs=None,
                                num_words=None):

    if remove_media_list is None:
        remove_media_list = []


# use this specify attributes on the media source that should be added to the node as attributes
#     if(media_attribs == None):
#         media_attribs = {}

    if include_media_list is None:
        media_sources_md = topic_media_list(user_mediacloud_key(),
                                            topics_id,
                                            timespans_id=timespans_id,
                                            limit=num_of_sources +
                                            len(remove_media_list),
                                            sort=top_media_sort)['media']
    else:
        media_sources_md = include_media_list

    if remove_media_list is not None:
        for r in remove_media_list:
            media_sources_md = _remove_media_source(r, media_sources_md)

    top_words = _build_top_words(media_sources_md, topics_id, timespans_id,
                                 remove_word_list, num_words)
    if remove_word_list is not None:
        top_words = _clean_top_words(top_words, remove_word_list)

    frame_network = _build_network(top_words, media_sources_md, media_attribs)

    _export_gexf_network(frame_network, '%s.gexf' % out_name)
    _export_d3_network(frame_network, '%s' % out_name)

    if generate_word_lists:
        with open('%s.txt' % out_name, 'w', encoding="utf-8") as wl:
            all_words = []
            media_sources = {
                ms['media_id']: ms['name']
                for ms in media_sources_md
            }
            # counts = {}
            for ms in top_words:
                # wl.write("\n\n%s (media id: %d):\n" % (media_sources[ms].encode('ascii', 'ignore'), ms))
                wl.write("\n\n{} (media id: {}):\n".format(
                    media_sources[ms], ms))
                for w in top_words[ms]:
                    all_words.append(w['term'])

                    # increment count to see how many media source include each word
                    # counts[ms]

                    # wl.write("- %s (%d)\n" % (w['term'].encode('ascii', 'ignore'), w['count']))
                    wl.write("- {} ({})\n".format(w['term'], w['count']))
                wl.write("\n")

    linefeed = chr(10)  # linefeed=\n
    s = linefeed.join(nx.generate_gexf(frame_network))  # doctest: +SKIP
    # for line in nx.generate_gexf(frame_network):  # doctest: +SKIP
    #     logger.debug line

    return s