8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NewsAPIを使い簡単にニュースサイトを作る

Last updated at Posted at 2020-08-22

前回の記事で予告したとおり今回はNewsAPIというものを使いニュースを取得して表示までします。

###プチ宣伝
誰でも簡単にオリジナルニュースが作れる素人ニュースというものを作りました。今回作るニュース一覧もあります。どんな風に動くか気になる方もみてください。前回の記事で紹介しています。

##完成図
newsapi.png

##APIを取得する

まずNewsAPIのサイトに行って「Get API Key」ボタンを押してください。

newsapi2.png

初めての方は新規登録画面が表示されるのでちゃちゃっと登録してください。登録が終わったらマイページが表示されるはずです。

newsapi3.png

API keyのところに書いてあるのがあなたのAPIです。このページは何度でも「Get API Key」ボタンをおせば行けるのでまだコピーする必要はありません。
そしてこれでNewsAPI側の設定は終わりです。あとはrailsです。

##rails

コントローラーは普通に作ってください。今回はnews controllerという名前でやります。
モデルは必要ありません。

news_controller.rb
class NewsController < ApplicationController
    def index
    end


    def data
      uri = URI.parse('http://newsapi.org/v2/top-headlines?country=jp&apiKey=さっき取得したAPI')
      json = Net::HTTP.get(uri)
      moments = JSON.parse(json)
      @data = moments['articles'].to_json
    end
end

今回は日本のニュースだけを取得します。本当は経済のニュースだけとか海外の英語のニュースとかも取得できます。URLを変更して色々仕分けるのも面白いと思います。
ここからは表示です。

index.html.erb
<p>ニュース</p>
<hr>
<div id="result">no information...</div>
<script>
var f = function(){
	$.ajax({
		type: 'GET',
		url: '/news/data'
	});
};
f();
</script>

ここでindexページにいったら'/news/data'に飛んで自動的にニュースを表示するようにします。

data.js.erb
var data = <%== @data %>;
var result = '<div class="datas">'
data.forEach(function(e){
	var div = '<div class="data">'
	if (e.urlToImage != null) {
	result += '<img src="' + e.urlToImage +'" class="image_data">';
	}
	result += '<a href="' + e.url +'" class="yahoo_link" target="_blank">' + e.title + '</a><br>';
	result += '<p class="time_data">' + e.publishedAt + '</p><hr class="clear">';
    div += '</div>'
});
result += '</div>'
$('#result').html(result);

dataはdata.html.erbではなくdata.js.erbです。かなり間違えやすいポイントなので注意してください。
簡単に説明すると1行目で@dataをjsで使えるようdataという変数に変えています。
2行目はデザインで3行目で繰り返し処理をしています。railsでいうeachです。
4行目もデザインで5-7行目は画像の処理です。5行目のif文は画像がない場合は画像を表示しないようにしています。6行目で表示してます。
8はタイトル、9行目で作成日時を表示してます。

あとはルーティングだけです!

routes.rb
get "news/data"
get "news/index"

これで完成です。お疲れさまでした!!!

うまく行かなかったときはコメント下さい。
そして途中で言ったとおりNewsAPIはURLを変更して細かくニュースを仕分けることが出来ます。NewsAPIのサイトの上方、Get startedをおせばそのへんの細かいやりかたが書いてあるはずです。
例えばアメリカのニュースは

https://newsapi.org/v2/top-headlines?country=us&apiKey=自分のAPI

このURLをnews controllerのdataアクションのURI.parseのとこにいれればいいわけです。簡単ですね。

##まとめ
とにかく一つ言えることは
誰でも簡単にオリジナルニュースが作れる素人ニュースというものを作りました。お願いします。(最後まで宣伝ごめんなさい)

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?