Android端末でニュース記事取得APIを使ってみる


Pocket

ニュース記事APIを使ってみました。

使ったAPIはこちら→https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_docs_id=26
docomo Developer supportのトレンド記事抽出APIです。

 
Docomo Trend API
 

2015/1月時点で、ニュース、エンタメ、スポーツ、・・・といった合計14ジャンルのインターネット上で人気のニュース記事、ブログ記事の取得ができます。
ジャンルごとに一度で取得できる記事数は異なるようですが、簡単に使ってみたところ50~500件ぐらいでした。

 
加えて、Twitter OAuthやdocomo IDを使うと、ユーザ別に記事をレコメンドしてくれる機能も使えるようです。
(おそらく、グノシーやスマートニュース的なあれだと思われますが、今回は試してません)

 

1.準備

まずはここからSDKをダウンロードしてきます。
ダウンロードしたファイルを解答して、libsフォルダに入っている下記ファイルをAndroidStudioプロジェクトのlibsフォルダにコピーします。
・docomo-webcuration-android-sdk-3.0.1.jar
・docomo-common-android-sdk-1.0.2.jar
・jackson-annotations-2.2.3.jar
・jackson-core-2.2.3.jar
・jackson-databind-2.2.3.jar
コピーしたらGradleプロジェクトのsyncを行って準備完了です。

※使用しているAndroidStudioのバージョンによっては、ビルド時に”duplicate files…”というエラーがでるので、その場合はbuild.gradleに下記を追加。

android{
  省略
  packagingOptions {
    exclude "META-INF/LICENSE"
    exclude "META-INF/NOTICE"
  }
}

 

2.実装方法

記事取得のやり方です。

INTERNETパーミッションを使用するのでマニフェスト追加。

<uses-permission android:name="android.permission.INTERNET" />

・Activity

@Override
protected void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  
  AuthApiKey.initializeAuth(/* Your Api Key */);
}

ActivityのonCreateでAPIKeyを設定して初期化します。

 
・記事取得処理をAsyncTaskで実装

public class ContentsRequestTask extends AsyncTask<Integer, Void, CurationContentsResultData> {
    private final String TAG = ContentsRequestTask.class.getName();
    private Lang mLang; //記事の言語(Lang.JP or Lang.EN)
    private TextView mView; //取得した記事を表示するView

    public ContentsRequestTask(Lang lang, TextView v) {
        mLang = lang;
        mView = v;
    }

    @Override
    protected CurationContentsResultData doInBackground(Integer... params) {
        CurationContentsResultData resultData = null;
        try {
            CurationContents contents = new CurationContents();
            CurationContentsRequestParam requestParam = new CurationContentsRequestParam();
            requestParam.setGenreId(params[0]); //ジャンルID
            requestParam.setNumber(10); //カテゴリ内の記事の取得件数(0以上50以下の整数)
            requestParam.setStartNo(1); //記事の開始番号(1以上999999以下の整数)
            requestParam.setLang(mLang);

            resultData = contents.request(requestParam);
        } catch (SdkException e) {
            Log.d(TAG, "ErrorCode:" + e.getErrorCode() + "/" + e.getMessage());

        } catch (ServerException e) {
            Log.d(TAG, "ErrorCode:" + e.getErrorCode() + "/" + e.getMessage());
        }
        return resultData;
    }

    @Override
    protected void onPostExecute(CurationContentsResultData resultData) {
        String text = "";
        if (resultData != null) {
            text += "全件数:" + resultData.getTotalResults() + "\n";
            text += "記事セット作成時間:" + resultData.getIssueDate() + "\n";
            text += "取得記事の件数:" + resultData.getItemsPerPage() + "\n";
            text += "開始番号" + resultData.getStartIndex() + "\n";
            text += "-----------記事-------------\n";
            for (CurationArticleContentsData data : resultData.getCurationArticleContentsDataList()) {
                text += "記事ID:" + data.getContentId() + "\n";
                text += "記事種別:" + data.getContentType() + "\n";
                text += "ジャンルID:" + data.getGenreId() + "\n";
                text += "タイトル:" + data.getCurationContentData().getTitle() + "\n";
                text += "内容:" + data.getCurationContentData().getBody() + "\n";
                text += "ソースURL:" + data.getCurationContentData().getLinkUrl() + "\n";
                text += "関連記事:" + data.getRelatedContents() + "\n";
            }


        }
        mView.setText(text);
    }
}

【16~20行目】
リクエストパラメータの設定です。
パラメータは4つで、
・ジャンルID ※ジャンルIDはジャンル情報取得APIで取得
・記事の取得件数 ※省略可。デフォルト10
・記事の取得開始番号 ※省略可。デフォルト1
・記事の言語(日本語or英語)
です。

ちなみに、取得可能な記事の最大数は一度取得してみないと解らない仕様のよう。なので、開始番号は追加で取得する時だけ設定すればいいみたいです。

 
【36~48行目】
取得した記事リストからデータ取得。
APIのレスポンスデータ構造については、https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_docs_id=24#tag01参照。

 
あとは、必要な場面でタスク実行してあげるだけ。

ContentsRequestTask task = new ContentsRequestTask(Lang.JP, mTextView);
task.execute(1); //1:ニュース 2:エンタメ・・・取得するジャンルIDを指定

以上です。

 
その他にも、
・SNS認証取得
・ジャンル情報の取得
・関連記事取得
・キーワード検索
・レコメンド(観覧ログ送信、レコメンド、リセットなど)
といった、機能が使えるようです。

 

あとがき

ニュース記事取得APIを試してみました。
今回使用したのはdocomo Developer supportのトレンド記事抽出APIで、『インターネット上のニュース記事やブログ記事から、注目度の高い記事』を取得できます。

その他にもニュース取得APIとしては、朝日新聞記事APIがあり、こちらは『朝日新聞の直近10年間分、約150万件の記事』を取得できるようです。
※ただ現在(2015/1月)では利用申し込みをしていない模様

ニュース記事を使うちょっとしたアプリを作る時に便利ですね。

 
 

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です