#1.はじめに
前回、PHPでいじいじした値をコンソール経由でExcelに表示した。そこで応用としてライブラリなんかを使えば簡単に(?)TwitterのつぶやきデータをExcelで集計できるのではないかと思いやってみた。
##使わせていただいたもの
Twitter用のライブラリについて調べたところPHPだとTwistOAuthというものが使いやすそうでしたのでこちらを使わせていただきました。
またTwistOAuthの使い方については以下のページを参考にさせて頂きました。
TwistOAuthを使ってユーザータイムラインを取得する
#2.PHPソース
とりあえずExcelから任意の文字列をTwitterで検索し結果をセルに配置てみました。
ExcelとPHPは同一ディレクトリにある前提です。
##PHPソース
###各読み込み
CONSUMER_KEY,,ACCESS_TOKEN,ACCESS_TOKEN_SECRETのxxxx部分はTwitterにアプリケーション登録した際に入手できる値です。
<?php
//twistoauth読み込み
require_once 'TwistOAuth.phar';
//アプリケーション登録情報 //各々の値
define('CONSUMER_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxx');
define('CONSUMER_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
define('ACCESS_TOKEN', 'xxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
define('ACCESS_TOKEN_SECRET', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
###標準入力受付
標準入力を受け取ります。またこの時文字コードを変換しておく必要があるようです。
//標準入力(検索語句入力)
echo "検索語句を入れてください:";
$str = trim(fgets(STDIN));
//変換
$query = mb_convert_encoding($str, "UTF-8", "SJIS");
//標準分離用ヘッダー
$header = " he@@der ";
//フッター
$footer = " f@@ter ";
###Twitterに接続
Twitterにアクセスしてツイートを取ってきます、VBAの都合(?)で30件以上は処理が出来ないことがあったので30件で取得してます。
//Twitterにアクセス
try
{
$token = new TwistOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
//30個検索
$result = $token->get('search/tweets', array('q' => $query,'count'=>'30'));
}
catch (TwistException $e)
{
$error = $e->getMessage();
exit( $error );
}
###結果の表示
Excelに表示したい値を$header;$footer;で囲います。
echo $str."を検索します \n";
//文字化け対策
ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); });
//出力
foreach($result->statuses as $status):
echo $header;
echo $status->text;
echo $footer;
echo "\n";
endforeach;
echo "end";
?>
$header
$footer
についてですが、VBA側で文字列を分離する際に使用しています。しかしながらツイート中にこれらの文字列と同一のものが含まれているとガッチャガチャになってしまうので出来るだけ呟かれそうになく、またリプライ等に含まれる@以下も考慮してひとまずこの形にしています(何かいい方法はないものだろうか)
#3.VBAソース
Sub ExcelでTwitterする()
Dim path As String
Dim query As String
Dim i As Integer
Dim WSH, Exec_cmd, Com As String 'コマンドライン用
Dim Result, tmph() As String '結果入れ
path = ThisWorkbook.path 'このファイルのパス
query = Range("H3") 'H3セルに検索語句を入れておく
'コマンドプロンプトオブジェクト
Set WSH = CreateObject("WScript.Shell")
'コマンド生成
Com = "php " & path & "\excel_de_twitter.php"
'コマンド実行
Set Exec_cmd = WSH.Exec("%ComSpec% /c " & Com)
'検索語句を標準入力に
Exec_cmd.StdIn.WriteLine (query)
Do While Exec_cmd.Status = 0
DoEvents '終わるまで待つ
Loop
'結果をすべて格納
Result = Exec_cmd.StdOut.ReadAll
'ヘッダーで分離
tmph = Split(Result, " he@@der ")
'フッターで分離->L列にどんどんん入れる
For i = 1 To UBound(tmph)
Cells(i + 1, 12) = Split(tmph(i), " f@@ter")
Next i
End Sub
#4.結果
ひとまず動けばいいやということでこんな感じの画面です。
今回は”島風”を含むワードを検索しています。
おまけ程度ですが解析っぽくするために30件中に”島風くん”ワードが何個あるかカウントしています。
検索を実行するとコンソールが一瞬立ち上がり、結果が表示されます。
なんかセルの大きさが変わってしまいましたがExcelのセルにTweetを表示できました。
表示は画面下の方まで続いてます。
とりあえず解析結果としては島風(完全一致)を含む新着ツイート30件中島風くんを含むツイートは1個存在した。といった感じですね。
#5.まとめ
ひとまずExcelにてTwitterのつぶやきを表示することは出来ました。
Excel上にツイートを表示させることによって、多様なExcel関数やマクロを使用でき、ユーザー独自に解析が出来るような気がします。
しかし、現状として取得できるツイート数が30件(なんでだろ?)と大変少なく、解析ツールとしては少々使いづらいです。。。
#6.課題
・200件くらい取得したい。
・ツイートだけを確実に分離できる仕組み