kintoneを利用して、プロ野球のニュースを集めるアンテナサイトを開発する試み。
前回は、野球のニュースを新着順に表示するひな形サイトを作りました。
今回は、kintoneのアプリ作成 => 組込みまでを行います。
kintoneのアプリ作成
まず最初に、kintoneの操作画面にログインして、野球アンテナ用のアプリを作成します。![]()
kintoneのアプリ作成については、公式ドキュメントを参照ください。
今回は、ニュースサイトのフィード情報のみを登録する、シンプルなアプリとします。
アプリの設定=>フォームと移動して、[リンク]を選択します。
作成が終わったらアプリを保存して、前回利用した野球サイトのニュースフィードを登録します。
これで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データになっています。
続いて、前回作成した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へ登録してみます。