スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



  

Twitterから特定の文字列を含むTweetを取得する方法

Twitterのことを耳にするようになったのでAPIを使用してみた。

2014/06/18 API v1.0からv1.1への移行に伴い、記事を更新しました。

今回使用したのはSearchAPIで、このAPIは調べたい単語を投げると、その単語が含まれているTweetとその周辺情報を拾ってきてくれる。
戻り値はjson形式だったので、PHPを使用して解析を行いHTMLに結果を出力するようにした。

以下は実装例のソースコード

<?php
// -------------
// ツイート検索
// -------------
function getTwitterSearchResult($key_word, $rpp=20)
{
 // 内部エンコードを統一する。
 mb_internal_encoding("UTF-8");
 // -------------------
 // APIへリクエスト
 // -------------------
 // ツイッターOAuth用ライブラリ オブジェクト
 $twObj = new TwitterOAuth(TW_API_KEY,
        TW_API_SECRET,
        TW_ACCESS_TOKEN,
        TW_ACCESS_TOKEN_SECRET
 );
 $query = TW_SEARCH_BASE_URL;
 $ret_json = $twObj->OAuthRequest(
  TW_SEARCH_BASE_URL,
  'GET',
  array('q'=>$key_word,'count'=>$rpp)
 );
 $ret = json_decode($ret_json, true);
 if (!isset($ret['statuses'])) return $ret; // 検索結果が見つからない場合は、リターン
 // -------------------
 // ツイート内容解析&修正
 // -------------------
 foreach($ret['statuses'] as $key=>$value) {
  // 念のため、UTF-8へ変更
  $text = mb_convert_encoding($value['text'], "UTF-8", "auto");
  $parts = array();
  $change_infos = array();
  // 差し込み開始位置配列
  $start_poss = array();
  // -------------------
  // 本文の短縮URLを変換
  // -------------------
  foreach($value['entities']['urls'] as $url) {
   $change_infos[] = array(
    "start" => $url['indices'][0],
    "end" => $url['indices'][1],
    "plug_text" => '<a class="tw_text_url" href="'.$url['url'].'" title="'.$url['expanded_url'].'" target="_blank">'.$url['display_url'].'</a>',
   );
   $start_poss[] = $url['indices'][0];
  }
  // -------------------
  // 本文の画像URLを変換
  // -------------------
  if (isset($value['entities']['media'])) {
   foreach($value['entities']['media'] as $media) {
    $change_infos[] = array(
     "start" => $media['indices'][0],
     "end" => $media['indices'][1],
     "plug_text" => '<a class="tw_text_url" href="'.$media['url'].'" title="'.$media['expanded_url'].'" target="_blank">'.$media['display_url'].'</a>',
    );
    $start_poss[] = $media['indices'][0];
   }
  }
  // -------------------
  // 本文のハッシュタグを変換
  // -------------------
  if (isset($value['entities']['hashtags'])) {
   foreach($value['entities']['hashtags'] as $hashtags) {
    $change_infos[] = array(
     "start" => $hashtags['indices'][0],
     "end" => $hashtags['indices'][1],
     "plug_text" => '<a class="tw_text_url" href="https://twitter.com/hashtag/' .urlencode($hashtags['text']).'?src=hash" target="_blank">#'.$hashtags['text'].'</a>',
    );
    $start_poss[] = $hashtags['indices'][0];
   }
  }
  // -------------------
  // 本文のユーザーメンションを変換
  // -------------------
  if (isset($value['entities']['user_mentions'])) {
   foreach($value['entities']['user_mentions'] as $user_mentions) {
    $change_infos[] = array(
     "start" => $user_mentions['indices'][0],
     "end" => $user_mentions['indices'][1],
     "plug_text" => '<a class="tw_text_url" href="https://twitter.com/' .$user_mentions['screen_name'].'" target="_blank">@'.$user_mentions['screen_name'].'</a>',
    );
    $start_poss[] = $user_mentions['indices'][0];
   }
  }
  // 差し込みが発生した場合
  if ($change_infos) {
   array_multisort($start_poss,SORT_ASC,SORT_NUMERIC,$change_infos);
   // 変更後
   $end_pos = 0;
   foreach($change_infos as $change_info) {
    // 変換URL前の文字列取得
    $parts[] = mb_substr($text, $end_pos, $change_info['start']-$end_pos);
    // 変換URL前の文字列取得
    $parts[] = $change_info['plug_text'];
    $end_pos = $change_info['end'];
   }
   $parts[] = mb_substr($text, $end_pos);

   $text = implode($parts);
  }
  $ret['statuses'][$key]['text'] = $text;
 }
 
 // 検索結果をリターン
 return $ret;
}
?>
  <HTML>
<table class="tweet_list">
 <tr>
  <td style="padding-top:5px;">
   <a style="text-decoration:none;" href="https://twitter.com/<?php echo $value['user']['screen_name']; ?>" target="_blank">
    <img style="padding:0;margin:0;" src="<?php echo $value['user']['profile_image_url']; ?>" />
   </a>
  </td>
  <td style="text-align:left;padding-right:0;width:85%">
   <a style="text-decoration:none;" href="https://twitter.com/<?php echo $value['user']['screen_name']; ?>" target="_blank">
    <strong class="tw_name"><?php echo $value['user']['name']; ?></strong>
   </a>
   <a style="text-decoration:none;" href="https://twitter.com/<?php echo $value['user']['screen_name']; ?>" target="_blank">
    <span style="font-size: 13px;color: #8899a6;">@<?php echo $value['user']['screen_name']; ?></span>
   </a><br>
   <a style="text-decoration:none;" href="https://twitter.com/<?php echo $value['user']['screen_name']; ?>/status/<?php echo $value['id']; ?>/" target="_blank">
    <span class="tw_link_gray"><?php echo date("Y/m/d H:i", strtotime($value['created_at'])); ?></span>
   </a>
  </td>
 </tr>
 <tr>
  <td colspan=2>
   <span class="alpha"><?php echo $value['text']; ?></span>
  </td>
 </tr>
 <tr>
  <td style="padding-top:8px;padding-left:0px;" colspan=2>
   <a style="text-decoration:none;display: block;float: left;margin-right:10px;" href="https://twitter.com/intent/tweet?in_reply_to=<?php echo $value['id']; ?>" title="返信" target="_blank">
    <img src="./../../image/twitter/reply.png" alt="tw_reply" />
    <span style="position: relative;bottom: 3px;" class="tw_link_gray">返信</span>
   </a>
   <a style="text-decoration:none;display: block;float: left;margin-right:10px;" href="https://twitter.com/intent/retweet?tweet_id=<?php echo $value['id']; ?>" title="リツイート" target="_blank">
    <img src="./../../image/twitter/retweet.png" alt="tw_retweet" />
    <span style="position: relative;bottom: 3px;" class="tw_link_gray">リツイート</span>
   </a>
   <a style="text-decoration:none;display: block;float: left;margin-right:10px;" href="https://twitter.com/intent/favorite?tweet_id=<?php echo $value['id']; ?>" title="お気に入りに登録" target="_blank">
    <img src="./../../image/twitter/favorite.png" alt="tw_favorite" />
    <span style="position: relative;bottom: 3px;" class="tw_link_gray">お気に入りに登録</span>
   </a>
  </td>
 </tr>
</table>


以下が実行例(日時も表示している)
Twitterから特定の文字列を含むTweetを取得する


  
Twitterのことを耳にするようになったのでAPIを使用してみた。

下記、過去の記事です。

今回使用したのはSearchAPIで、このAPIは調べたい単語を投げると、その単語が含まれているTweetとその周辺情報を拾ってきてくれる。
戻り値はXML形式だったので、PHPを使用して解析を行いHTMLに結果を出力するようにした。

以下は実装例のソースコード

<?php
 $data = null;
 $keyword = "";
 if (isset($_POST["keyword"])) {
  $keyword = $_POST["keyword"];
  if (!empty($keyword)) {
   $query = "http://search.twitter.com/search.atom?q=" . urlencode($keyword) . "&rpp=20";
   $data = simplexml_load_file($query);
  } else {
   $data = array();
  }
 }
?>
 <HTML>
 echo "<BR />";
 echo "<H2>検索結果</H2>";
 echo "<TABLE border=\"1px\" width=\"800px\">";
 echo "<TR>";
 echo "<TH width=\"200px\">発言者</th>";
 echo "<TH width=\"500px\">Tweet</th>";
 echo "<TH width=\"200px\">投稿時間</th>";
 echo "</TR>";
 if (isset($data->entry)) {
  foreach ($data->entry as $key => $value) {
   $updated = str_replace("Z", "", $value->updated);
   $updated = str_replace("T", " ", $updated);
   $updated = date("Y-m-d H:i:s", strtotime($updated ." + 9 hours"));
   echo "<TR>";
   echo "<TD>" .$value->author->name. "</TD>";
   echo "<TD>" .$value->content. "</TD>";
   echo "<TD>" .$updated. "</TD>";
   echo "<TR>";
  }
 } else {
  echo "<tr><td colspan=\"3\">";
  if (!empty($keyword)) {
   echo $keyword . " に一致する情報は見つかりませんでした。";
  } else {
   echo "文字列を入力してから、もう一度検索してください。";
  }
  echo "</td></tr>";
 }

 echo "</TABLE>";


以下が実行例(日時も表示している)
Twitterから特定の文字列を含むTweetを取得する
関連記事
スポンサーサイト

テーマ : Twitter
ジャンル : コンピュータ

コメント

非公開コメント

検索フォーム
プロフィール

サトリヒロシ

Author:サトリヒロシ
ビジネスを重視した企画を支援したいエンジニアが、何かを書こうとするブログです。

サトリ潜伏先
サトリ倉庫

WEB関連の技術で調査リクエストがあればご連絡ください。

カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
カテゴリ
最新記事
最新コメント
最新トラックバック
月別アーカイブ
RSSリンクの表示
リンク
QRコード
QRコード
FC2カウンター
スポンサードリンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。