読者です 読者をやめる 読者になる 読者になる

【Android】Google Feed APIを使ってRSSフィードを取得

 

RSSのURLをAPIに渡しサイトの記事をJSONで取得する流れです。

 

URLは以下のような感じです。

https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://www.digg.com/rss/index.xml&num=30

 

v   ※バージョン1.0

q   ※RSSのURL

num ※取得する記事の件数

 

--------------------------------------------------------------------------------------------------------

AndroidManifest.xml
<manifest
  xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

忘れずに!

 

--------------------------------------------------------------------------------------------------------

AsyncTaskを実装したクラスでの実装イメージです

(AsyncTaskのdoInBackground内のイメージ)

(OkHttpを使用)

 

  ArrayList<RSSTitle> list = new ArrayList<RSSTitle>();
  try {
    Thread.sleep(1000); //1秒停止
    String feedurl = "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=" + siteurl + "&num=30";
    Request request = new Request.Builder().url(feedurl).build();
    try {
      OkHttpClient client = new OkHttpClient();
      Response response = client.newCall(request).execute();
      String result = response.body().string();

      try {
        JSONObject resultJson = new JSONObject(result);
        String responseData = resultJson.getString("responseData");
        JSONObject responseDataJson = new JSONObject(responseData);
        String feed = responseDataJson.getString("feed");

        JSONObject feedJson = new JSONObject(feed);
        JSONArray items = feedJson.getJSONArray("entries");
        int count = items.length();
        for (int i = 0; i < count; i++) {
          JSONObject item = items.getJSONObject(i);
          String title = item.getString("title");
          String link = item.getString("link");
          RSSTitle mt = new RSSTitle(title, link);//独自クラス
          list.add(mt);
        }
      } catch (JSONException e) {
        e.printStackTrace();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  return list;