Skip to content

Instantly share code, notes, and snippets.

@chrislkeller
Last active March 5, 2021 19:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrislkeller/6016345 to your computer and use it in GitHub Desktop.
Save chrislkeller/6016345 to your computer and use it in GitHub Desktop.
Query the KPCC article API

Function to query API

    class kpcc_api_article():
        def __init__(self, permalink, image_asset, publish_date, short_title):
            self.user = permalink
            self.text = image_asset
            self.graphic = publish_date
            self.time = short_title
    
    # search kpcc api for related articles to display on detail pages
    def search_kpcc_article_api():
        url_prefix = 'http://www.scpr.org/api/v2/content/?'
        url_types = 'types=news,blogs,segments'
        url_query = '&query=wildfire+burning+california'
        url_limit = '&limit=10'
        url_page = '&page=1'
        search_url = '%s%s%s%s%s' % (url_prefix, url_types, url_query, url_limit, url_page)
        json_response = urllib.urlopen(search_url)
        json_response = json_response.readlines()
        js_object = json.loads(json_response[0])
        articles = []
        for kpcc_article in js_object:
            article_permalink = kpcc_article['permalink']
            article_image_asset = kpcc_article['assets'][0]['small']['url']
            article_publish_date = kpcc_article['published_at']
            article_short_title = kpcc_article['short_title']
            this_article = kpcc_api_article(article_permalink, article_image_asset, article_publish_date, article_short_title)
            articles.append(this_article)
        return articles

Returns to the view as

def detail(request, fire_slug):
    calwildfire = get_object_or_404(CalWildfire, fire_slug=fire_slug)
    calwildfires = CalWildfire.objects.all()[:15]
    wildfire_updates = WildfireUpdate.objects.filter(fire_name__fire_name=calwildfire.fire_name)
    auth1 = tweepy.auth.OAuthHandler(settings.TWEEPY_CONSUMER_KEY, settings.TWEEPY_CONSUMER_SECRET)
    auth1.set_access_token(settings.TWEEPY_ACCESS_TOKEN, settings.TWEEPY_ACCESS_TOKEN_SECRET)
    api = tweepy.API(auth1)
    result_list = api.search(calwildfire.twitter_hashtag)

    kpcc_articles = search_kpcc_article_api()

    if calwildfire.asset_host_image_id:
        kpcc_image = search_assethost(settings.ASSETHOST_TOKEN_SECRET, calwildfire.asset_host_image_id)
    else:
        kpcc_image = None

    return render_to_response('detail.html', {
        'calwildfire': calwildfire,
        'calwildfires': calwildfires,
        'wildfire_updates': wildfire_updates,
        'result_list': result_list,
        'kpcc_articles': kpcc_articles,
        'kpcc_image': kpcc_image,
    }, context_instance=RequestContext(request))

And on the template I can call

    {% for article in kpcc_articles %}
        {{ article }}
    {% endfor %}

Which gives me access to

    <calfire_tracker.kpccapi.kpcc_api_article instance at 0x109cc80e0> <calfire_tracker.kpccapi.kpcc_api_article instance at 0x109cc8c20>
    <calfire_tracker.kpccapi.kpcc_api_article instance at 0x109cc89e0> <calfire_tracker.kpccapi.kpcc_api_article instance at 0x109cc8878>
    <calfire_tracker.kpccapi.kpcc_api_article instance at 0x109cc85a8> <calfire_tracker.kpccapi.kpcc_api_article instance at 0x1099bd440>
    <calfire_tracker.kpccapi.kpcc_api_article instance at 0x1099bdfc8> <calfire_tracker.kpccapi.kpcc_api_article instance at 0x1099bd7a0>
    <calfire_tracker.kpccapi.kpcc_api_article instance at 0x1099bd6c8> <calfire_tracker.kpccapi.kpcc_api_article instance at 0x1099bd0e0>

I have never learned how to unpack these though… Is it something like

    {% with something as target %}
        {{ target.param }}
    {% endwith %}                         
@jeremyjbowers
Copy link

{% for article in kpcc_articles %}
            User: {{ article.user }}
            Text: {{ article.text }}
            Graphic: {{ article.graphic }}
            Time: {{ article.time }}
{% endfor %}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment