kintoneを使って野球アンテナをつくる その3 kintone接続編

kintoneを利用して、プロ野球のニュースを集めるアンテナサイトを開発する試み。

前回は、野球のニュースを新着順に表示するひな形サイトを作りました。

今回は、kintoneのアプリ作成 => 組込みまでを行います。

kintoneのアプリ作成

まず最初に、kintoneの操作画面にログインして、野球アンテナ用のアプリを作成します。
createapl.png

kintoneのアプリ作成については、公式ドキュメントを参照ください。

今回は、ニュースサイトのフィード情報のみを登録する、シンプルなアプリとします。
アプリの設定=>フォームと移動して、[リンク]を選択します。

link.png

作成が終わったらアプリを保存して、前回利用した野球サイトのニュースフィードを登録します。

feedlist.png

これでkintone側の準備は完了です。

REST APIの情報ページ

続いて、SimplePieとkintoneを連動させるために、REST APIを叩いていきます。kintoneのREST APIに関する技術情報は以下のページにまとまっていました。

kintoneのデータにアクセスするためには、認証を行わければいけません。
REST API経由でkintoneの認証を行う方法は、以下のページにまとまっています。

以上を元に、認証ロジックを作成します。

今回は [kinauth.php] という認証用のファイルを別ファイルで作成してみました。

kinauth.php

<?php
// アプリのサブドメインを設定
$subDomain = "hogehoge";
 
// ユーザー認証
$loginName = "login-name"; // ログイン名
$password = "pasword-data";    // パスワード

// リクエストヘッダ
$header = array(
    "Host: " . $subDomain . ".cybozu.com:443",
    "Content-Type: application/json",
    "X-Cybozu-Authorization: " . base64_encode($loginName . ':' . $password),
);
 
// フォーム設計情報を取得するアプリのアプリID
$appId = 00;
// HTTPコンテキスト
$context = array(
    "http" => array(
        "method" => 'GET',
        "header" => implode("\r\n", $header),
        "content" => json_encode(array("app" => $appId, )),
    )
);

// REST APIでフォーム設計情報を取得
$response = file_get_contents(
        "https://" . $subDomain . ".cybozu.com/k/v1/records.json", // URI
        false, // use_include_pathは必要ないのでfalse
        stream_context_create($context) // コンテキストの生成
); 
?>

このコードを実行すると、以下の様なJSONデータを取得できます[records]というjsonデータの下に、kintoneに登録されたデータがjson形式で確認できるのが分かります。いわゆる多次元構造のjsonデータになっています。

kintone-json.png


続いて、前回作成したSimplePieのコードに手を入れます。

index.php

<?php

// SimplePieを呼び出し
require_once('autoloader.php');

// kintone の認証プログラムを呼び出し
require_once('kinauth.php');

// 取得したjsonデータからフィードを取得して配列 $array に代入
// アロー演算子でフィードURLを取得する
$result = json_decode($response);
foreach($result->records as $records) {
    $array[].=$records->URL->value;
}

// SimplePieの関数 set_feed_url に配列 $array を読みこませる
$feed = new SimplePie();
$feed->set_feed_url($array);
$feed->init();

?>

まず、kinauth.phpをrequire_onceして、取得したjsonデータを$responseに代入します。その後、$responseをjson_decodeします。phpのjson_decode関数を利用してjsonデータを読むこむ際は

  • 連想配列に変換する(json_decode 関数に引数 true を指定する)
  • そのままオブジェクトとして使用する(引数を指定しない、もしくはfalseを指定する)

の2種類の方法があります。今回はオブジェクト型のデータからアロー演算子を利用して、jsonに格納されているURLデータを取得し、配列$arrayに入れました。

$result = json_decode($response);
foreach($result->records as $records) {
    $array[].=$records->URL->value;
}

以下は、SimplePieのループ処理です。前回とほぼ同じです。(BootStrapのテーマに合わせてhtmlを変えています)

    <?php
        foreach ($feed->get_items() as $item):
    ?>
                <h2>
                  <a href="<?php echo $item->get_permalink(); ?>"><?php echo $item->get_title(); ?></a>
                </h2>
                <p class="lead">
                    by <a href="index.php"><?php echo  $item->get_feed()->get_title(); ?></a>
                </p>
                <p><span class="glyphicon glyphicon-time"></span> Posted on <?php echo $item->get_date('Y-m-d H:i'); ?></p>
                <hr>
                <p><?php echo $item->get_description(); ?></p>
                <a class="btn btn-primary" href="<?php echo $item->get_permalink(); ?>">Read More <span class="glyphicon glyphicon-chevron-right"></span></a>

                <hr>
    <?php endforeach; ?>

メモ

kintoneのAPIは、1日あたりの呼び出し回数制限があります。(1万回)
実際に運用する場合は、ニュースページが読み込まれるたびにkintoneへアクセスするのも無駄が多いので、あえて今回のケースで構築するなら

  • kintoneからフィードリストを取得し、json形式のファイルをサーバーに保存
    保存したjsonからニュースリストを生成

などが現実的なのでしょう、きっと。

エラー処理も入っていないので、追って実装を試みます

次回は、パースしたニュース記事データを、kintoneへ登録してみます。