Prototyping with real news

Access worldwide news with code’ powered by NewsAPI.org

Tom Fejér
Prototypr
Published in
5 min readJun 13, 2018

--

tl;dr: I made a prototype using news articles from over 30,000 news sources and blogs and this is a sneak peek how I did it.

Getting started

There are myriad of tools for designers out there. IMHO the most powerful design and prototyping tool currently is Framer Studio. If you’re interested in prototyping with code and using API-s, understanding JSON files, I would recommend my previous post about Using Spotify Web API in Framer.

Recently I found NewsAPI.org, a small team with a super powerful API to big news sources like Google News, The New York Times, The Wall Street Journal, The Verge, National Geographic. Next to the big names there are over 30,000 sources available from different countries and languages (even in 🇭🇺Hungarian).

note: if u use it for free NewsAPI.org attribution required# It means that you need to add a credit to NewsAPI.org near to your implementation so that users of your product know where your data came from. This can be a simple 'powered by NewsAPI.org' link, a mention in your Github repo, or a line somewhere in your app description. This way you can give a little back in exchange for free access to the API.
☝️Example of a JSON you can get from newsapi.org

After you registered you will find your API key at you Account page. We will need that to authenticate ourselves when we are requesting data from the API.

When you are logged in all the examples on the site are using your current API key 🙌

IMPORTANT: Do not share your API key in your prototypes or elsewhere. You have limited number of requests and this is your personal key 🗝

Get what you ‘GET’

After you acquired your apiKey you can start your XMLHttpRequest in Framer in order to get your data in a JSON format.

# Use XMLHttpRequest (XHR) objects to interact with servers. You can retrieve data from a URL without having to do a full page refresh. This enables a Web page to update just part of a page without disrupting what the user is doing.
change ****************************** to your apiKey

If you run this ☝️you can get back something like this 👇

» "How to watch Microsoft's Xbox E3 2018 press conference"

Everything

Let’s see what else we can get. In the example above we requested the top headlines from the US which looked like this:

r.open 'GET', 'https://newsapi.org/v2/top-headlines?' + 'country=us&' + 'apiKey=******************************', true

If you want to get everything and not only the headlines, you can change the top-headlines to everything :

r.open 'GET', 'https://newsapi.org/v2/everything?' + 'country=us&' + 'apiKey=******************************', true

Country

In case you want something else than the 🗽American news you can pick from these countries: ae ar at aube bg br ca ch cn co cu cz de eg fr gb gr hk hu id ieil in it jp kr lt lv ma mx my ng nl no nz ph pl pt rors ru sa se sg si sk th tr tw ua us ve za .

r.open 'GET', 'https://newsapi.org/v2/everything?' + 'country=hu&' + 'apiKey=******************************', true

When you do not specify you will get all countries.

Categories

IMO the most powerful part of this API is to get curated headlines for specific categories from different sources. The currently available categories: businessentertainment general health science sports technology

r.open 'GET', 'https://newsapi.org/v2/top-headlines?'+ 'country=us&' + 'category=entertainment&'+'apiKey=******************************', true

Even more things

If you dive in to the API documentation you can learn how to get news from exact dates, about certain topics, from specific sources.

Now we know what we can get, let’s begin designing the interface.

Designing the news

For this prototype I used Google Material Theme Editor’s Fortnightly UI kit and tweaked it a bit in order to generate a few different card types with titles, descriptions and captions.

The Material Theme Editor helps you make your own branded symbol library and apply global style changes to color, shape, and typography. Currently available for Sketch, you can access the Material Theme Editor by downloading the Material Plugin.

The Theme Editor helped to generate components like cards, list items, App bars super quickly.

🙏thanks @GoogleDesign
Framer Studio’s Design tab

From Sketch I brought the design to Framer’s Design space. Recently it became super fast to create layouts in Framer compared to past workflow when every layer and border radius was done with code.

Populate the content

Locate things[0] in your JSON

JSON is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate.

recommended reading: Prototype with real data in Framer, from JSON to multi-device and internet of things

What I did in the past to gain a better understanding on the data I am dealing with and understand the structure is two things:

1. Beautifying the JSON to make it easier to read

⚛️Atom with Beautify-ed JSON file

2. Importing JSON to Firebase to expose the hierarchy

With these tricks you can easily see that r.response.articles[0].title will give back "NBC Revives ‘Brooklyn Nine-Nine,’ and Fans Rejoice" and to get the name of a source for the 2nd article r.response.articles[1].source.name

Calculating Time

#current time
currentTime = new Date()
#function calculate and fill date
dateFill = (layer, i) ->
thisDate = new Date (r.response.articles[i].publishedAt)
newsDate = currentTime.getHours() - thisDate.getHours() + " hours" + " ago"
layer.text = newsDate

Good News, Everyone!

It is done. It works as intended. In case you would like to get your hands on the code drop me a line on twitter @grotandthemob

🔍 Design Details

  • separator on top only shown when you scroll
  • material bottom navigation
learn more about this component at material.io

Learn More…

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Responses (3)