IBM Bluemixを使って Twitter上の評判検索 アプリケーションを作る

IBM Bluemixを使って
Twitter上の評判検索
アプリケーションを作る
IBM Insights for Twitter デモサイト
https://cdetestapp.mybluemix.net/
“IBM” で検索
“IBM” を含むツイートが検索される。
“IBM sentiment:positive” で検索
“IBM” を含むツイートで、内容がポジティブなものだけが検索される。
IBM Insights for Twitter の情報
https://www.ng.bluemix.net/docs/#services/Twitter/index.html#twitter
API リファレンス情報
このページは常に開けるようにしておく。
https://cdeservice.mybluemix.net/rest-api/#!/ibm_twitter_insights
これから作成するアプリ(最終形)
検索対象文字列を指定すると、その感情ごとの割合をドーナツチャートで表示する。
これから作成するアプリ(今日のゴール)
検索対象文字列をパラメータ q で指定。
指定文字列の感情毎の検索結果件数を表形式で出力する。
Bluemix にログイン
ログイン後のダッシュボード画面で「アプリの作成」をクリック
WEB アプリを選択
アプリの種類は「WEB」を選択
PHP ランタイムを選択
ランタイムの種類は「PHP」を選択。
※実際はどのランタイムでも作れるが、本資料では PHP で作成する
続行
PHP ランタイムの説明を確認して「続行」。
アプリケーションの名前を指定
PHP ランタイムアプリケーションの名前を指定して入力して「終了」。
ホスト名の一部になるので、重ならない名前にする。
(例) kkimura(自分の名前)-php-YYYYMMDD(日付)
ステージング処理待ち
PHP ランタイムの作成はこれで終わり。ステージング処理が完了するまで待つ。
この画面では、この後にどうやって PHP アプリをランタイムに反映させるか、
の方法が紹介されている。
ステージング処理完了
ステージング処理完了(もうアプリケーションサーバーとして利用可能)。
一度ダッシュボードに戻る。
ダッシュボード画面
ダッシュボード画面に今作った PHP ランタイムが追加されていることを確認。
このアイコンをクリック。
作成した PHP ランタイムの概要
作成して稼働中の PHP ランタイムが表示されていることを確認。
ここに Twitter 連携サービスを追加するので、「サービスまたは API の追加」
をクリック。
Insights for Twitter を選択
IBM Bluemix のサービス一覧が表示される。
画面左で「ビッグデータ」を選択して、「Insights for Twitter」をクリック
Insights for Twitter の追加
Insights for Twitter サービスの内容が表示される。
画面右のアプリに作成した PHP ランタイムが選択されていることを確認し、
「作成」をクリック。
再ステージングの実行
構成が変わったため、再ステージングする必要がある。
再ステージングが促されるので「再ステージ」を選択。
再ステージング中
ランタイムが再ステージング中になる。
サービスに “Insights for Twitter” が追加されたことを確認。
Insights for Twitter の確認
画面を下にスクロールすると、”Insights for Twitter” サービスのアイコンが
追加されていることが確認できる。
その中の「資格情報の表示」をクリック。
資格情報の確認
”Insights for Twitter” サービスを利用するための情報が JSON フォーマットで
表示される。この内容をテキストファイルにコピーしておく。
資格情報の内容
{
"twitterinsights": [
{
"name": "Insights for Twitter-tr",
"label": "twitterinsights",
"plan": "Free",
"credentials": {
"port": "433",
"username": "5bb107c76f9ca7c9049583ebff7e5815",
"host": "cdeservice.mybluemix.net",
"password": "q7wy60fEPF",
"url": "https://5bb107c76f9ca7c9049583ebff7e5815:[email protected]"
}
}
]
}
“credentials” 内の “url” に Insights for Twitter の API を使うための
ユーザー名&パスワード付き URL がある。
この内容はランタイムの VCAP_SERVICES という環境変数の値として取得可。
試しにブラウザで実行してみる
先ほど確認した “url” 値の最後に “/api/v1/messages/count?q=IBM” を付けて、
ウェブブラウザでアクセスすると、”IBM” で検索した時の実行結果が表示される。
count 関数を実行しているので、結果のツイート数が “results” 値として得られる。
“count” 部分を “search” にすると、ツイート内容も含めた検索結果が得られる。
ポジティブな内容だけをカウントする
先ほど確認した “url” 値の最後に “/api/v1/messages/count?q=IBM%20sentiment%3apositive”
を付けて、ウェブブラウザでアクセスすると、”IBM sentiment:potisive” で検索した時の
実行結果(ポジティブな内容のツイート数)が表示される。
“positive” の部分を “negative” に変えると、ネガティブなツイート数が検索できる。
“neutral” に変えると、中間感情的なツイート数が検索できる。
“ambivalent” に変えると、混合感情的なツイート数が検索できる。
count API の実行結果(JSON)
{
"related":{
"search":{
"href":”https://cdeservice.mybluemix.net/api/v1/messages/search?q=IBM+sentiment%3Apositive”
}
},
"search":{
"results":52992
}
}
アプリの実装内容
(1) パラメータを受け取る。
(例 IBM)
(2) 受け取ったパラメータに “positive”, “neutral”, “ambivalent”, “negative” の各感情
要素を付けて、Insights for Twitter の count 関数を(4回)実行する。
(例 “q=IBM%20sentiment%3apositive”, “q=IBM%20sentiment%3aneutral”, … )
(3) 各結果のツイート数をそれぞれ取得して、結果画面に反映させる。
ソースコードの開発/デプロイ
• 選択肢は3つ
• Eclipse 環境で開発し、Eclipse プラグインを使ってデプロ
イ
• 普通にテキストエディタで開発し、cf ツールを使ってデ
プロイ
• IDS(IBM DevOps Services) を使って Git リポジトリを作り、
リポジトリのコードを編集した後にビルド&デプロイ
今回は IDS を使った方法を紹介します。
ソースコードを Git リポジトリに作成
この PHP ランタイム用のソースコード一式を Git のリポジトリに作成する。
画面右上の「Git の追加」をクリック。
Git リポジトリ作成の確認
IDS 上にこのランタイム用の Git のリポジトリを作る、という確認画面。
「続行」をクリック。
Git リポジトリの作成に成功
Git リポジトリが正しく作成された旨のメッセージが表示。
「クローズ」をクリック。
Git リポジトリへのリンク
ランタイム概要画面に戻ると、Git リポジトリへのリンクが作成されている。
「コードの編集」をクリック。
IDS へ移動 & ファイル追加
別ウィンドウが開いて IDS の画面に移動する。
プロジェクト名を右クリックして、「新規」 - 「ファイル」を選択。
追加ファイル名を指定
追加するファイルの名前を指定。
ここでは insights4twitter.php と入力。
追加したファイルの編集画面
追加した insights4twitter.php の編集画面。
ここに PHP でファイルの内容を記述する。
insights4twitter.php の内容
<html>
foreach( $sentiments as $sentiment ){
<head>
$url = $iturl . $sentiment;
各 sentiment
ごとに件数を取得
<title>Insights for Twitter in PHP</title>
$text = file_get_contents( $url );
</head>
$json = json_decode( $text );
<body>
$results = $json->search->results;
<?php
環境変数取得
?>
$apiurl = '';
<tr>
$vcap = getenv( 'VCAP_SERVICES' );
<td><?php echo( $sentiment ); ?></td>
if( $vcap ){
<td><?php echo( $results ); ?></td>
$bluemixenv = json_decode( $vcap );
</tr>
$apiurl = $bluemixenv->twitterinsights[0]->credentials->url;
<?php
}
}
if( isset( $_GET['q'] ) ){
?>
$q = $_GET['q'];
if( $q ){
パラメータ q が
ある場合のみ実行
</table>
<?php
?>
}
<h1><?php echo( $q ); ?></h1>
}
<table border='1'>
4つの sentiment
?>
<?php
$iturl = $apiurl . '/api/v1/messages/count?q=' . $q .
'%20sentiment%3a';
$sentiments = array( 'positive', 'neutral', 'ambivalent', 'negative' );
</body>
</html>
各結果を表形式で
出力
PHP ソースコード入力
insights4twitter.php の内容を入力。
入力し終わったら、画面左の「Git リポジトリー」ボタンをクリック。
Git コミットの準備
リポジトリに変更を加えたので、まずコミットする必要がある。
コミット対象として「すべて選択」をクリック。
コミットメッセージ&コミット
コミット対象が反転したら、コミットメッセージ(例 「insights4twitter.php 追加」)
を入力して、画面右上の「コミット」をクリック。
Git プッシュ
コミットが成功したら、コミット内容をレポジトリに「プッシュ」する。
その後、プッシュ後の様子をみるために「BUILE & DEPLOY」をクリック
ビルド & デプロイ
IDS ではプッシュ後、自動的にプロジェクトのビルドとデプロイまでが実行される。
その様子が Build Stage と Deploy Stage で確認できる。
上画面ではビルドは成功していて、デプロイを行っている最中になっている。
デプロイ完了
デプロイまで成功したことを確認する。
これで insights4twitter.php はウェブからアクセス可能な状態になっている。
動作確認
ウェブブラウザで
http://(アプリ名).mybluemix.net/insights4twitter.php?q=IBM
にアクセスして、期待通りに表が出力される結果になることを確認する。
“IBM” の部分を別の文字列にしても動くことを確認する。
ドーナツチャートで表示する場合
Google Visualization API を使用:
https://developers.google.com/chart/interactive/docs/gallery/piechart
jQuery を使用:
https://jquery.com/
insights4twitter2.php の内容
<html>
<head>
$sentiments = array( 'positive', 'neutral', 'ambivalent', 'negative' );
<title>Insights for Twitter in PHP</title>
foreach( $sentiments as $sentiment ){
<script src="//www.google.com/jsapi"></script>
$url = $iturl . $sentiment;
<script src="//code.jquery.com/jquery-2.0.3.min.js"></script>
$text = file_get_contents( $url );
<script type="text/javascript">
$json = json_decode( $text );
google.load("visualization", "1", {packages:["corechart"]});
$results = $json->search->results;
$(function(){
?>
var data = google.visualization.arrayToDataTable([
[ 'Sentiment', '#' ]
<?php
,[ '<?php echo( $sentiment ); ?>', <?php echo( $results ); ?> ]
<?php } } } ?>
]);
$apiurl = '';
var options = { title: '<?php echo( $q ); ?>', piHole: 0.4 };
$vcap = getenv( 'VCAP_SERVICES' );
var chart = new google.visualization.PieChart( document.getElementById('donutchart') );
if( $vcap ){
chart.draw( data, options );
$bluemixenv = json_decode( $vcap );
});
$apiurl = $bluemixenv->twitterinsights[0]->credentials->url;
</script>
}
</head>
if( isset( $_GET['q'] ) ){
<body>
$q = $_GET['q'];
<h1><?php echo( $q ); ?></h1>
if( $q ){
<div id='donutchart' style='width:100%; height:90%;'></div>
$iturl = $apiurl . '/api/v1/messages/count?q=' . $q .
'%20sentiment%3a';
</body>
</html>
動作確認
insights4twitter2.php を前頁の内容で作成してコミット&プッシュ&デプロイ。
ウェブブラウザで
http://(アプリ名).mybluemix.net/insights4twitter2.php?q=IBM
にアクセスして、ドーナツチャートが表示されることを確認する。
“IBM” の部分を別の文字列にしても動くことを確認する。