コンテンツへスキップ

PHPからTweet(Twitter App、TwitterOAuth利用)

Twitterの影響力

WEBページのアクセスログを見ていると、Twitterからの訪問者が多く関心しています。昔のSEOとはかなり異なるなと体感しております。

システム公開後、数日後よりIFTTTを使ってTwitterへめざましじゃんけんの結果のTweetを開始しました。
当初、ホームページへの結果更新のついでにTwitterへ投稿をポストするぐらいの、ついで処理だったのですが、SNSらしいコミュニケーションがあったりと、文字数制限やハッシュタグなど各種成約の基で的確に内容を伝えるなど、Twitterワールドに興味を持ちました。(IFTTTでも問題なく投稿できます、ただ、自分でのTwitterアプリ作成が気になったので、PHPからのTweetを実装しました)

Twitterへアプリ登録。(PHPから実行時に必要となる、API Key、API Secret Key、Access Token、Access Token Secretの取得を行います

PHPからTwitterへの操作は、TwitterOAuthというライブラリを用います。

  1. Twitterへの開発者登録とApp登録
  2. TwitterOAuth導入

Twitterへの開発者登録とApp登録

Twitterの以下のURLへアクセスし、登録をすすめます。

上のURLよりサービスにログインします。

ログイン後の画面です。右上の「Create an app」をクリックします。

「Create an app」を押すと、最初に開発者アカウントへの登録へ誘導されます。

一番の開発理由を聞かれます。「Professional」これは通常ビジネス目的、「Hobbyist」趣味なので、個人利用は通常このカテゴリとおもいます。
今回は、API経由でTweet・Postを行いたいので、Making a botを選択しました。BOTの作成。

アカウント情報の確認をされました。通常問題ないと思います。

1,居住国、2.呼び名を聞かれました。それぞれ、Japanと「(適当に)mikiie」と登録しました。

アプリの説明をフリーフォーマットで記載しました。
WEB翻訳などで準備した内容を貼り付ければOKです。

追加の質問事項に回答します。
Twitter情報を分析Analyzeするか? Tweet,Retweet, Like, Followなどを実施するか?
また、フリーフォーマットで、開発対象の機能内容の記載が必要でした。

これまでに記載や選択した内容のサマリ画面が表示され、間違いがないか確認を行い、「Looks good!」を選択します。

最後に利用規約に同意し、Submit Application(申請を送信)すると、利用申請の結果がメールで届きます。

利用申請後に着信した利用申請結果メールのリンクよりアクセスすると、Welcome画面が表示されます。

開発登録者完了後に、Create an appを実施するとアプリの作成が行えます。
コールバックURLを登録する必要がありまうが、PHPが動作するサーバで問題ないとおもますので、http://127.0.0.1/と登録しておけば問題ないです。

最後に、Keys and TokensでアプリのAPI Keysを取得します。
(API Key、API Secret Key、Access Token、Access Token Secretの取得を行います

TwitterOAuth導入

TwitterOAuth

GitHub-twitteroauth

V1.1 Source code (tar.gz)

TwitterOAuthをダウンロードし、PHPを利用したいサーバに配置します。

  1. ライブラリのダウンロード
  2. tar.gzの解凍
  3. フォルダ名の変更
$ curl -OL https://github.com/abraham/twitteroauth/archive/1.0.1.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 127 0 127 0 0 285 0 --:--:-- --:--:-- --:--:-- 294
100 714k 0 714k 0 0 475k 0 --:--:-- 0:00:01 --:--:-- 1674k

$ tar -zxvf 1.0.1.tar.gz
$ mv twitteroauth-1.0.1/ twitteroauth/

以下、一番簡単なサンプルPHPです。

<?php
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

$consumerKey = "your consumer key";
$consumerSecret = "your consumer secret";
$accessToken = "your access token";
$accessTokenSecret = "your access token secret";

$twitter = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

$result = $twitter->post(
        "statuses/update",
        array("status" => "Tweetテスト")
);

if($twitter->getLastHttpCode() == 200) {
    print "tweeted\n";
} else {  &nbsp; 
 &nbsp;  print "tweet failed\n";
}
以下が私が作成したスクリプトです。
  • 利用したいハッシュタグを配列登録 (ランダムで選択)
  • 280バイト(日本語140文字)対応
    文字数に関しては、投稿できる文字数が多くなっているようです。
    $max_char = 280 + $url_char - 11.5;の「$max_char」を大きくして、投稿可能な最大文字数を確認してください。
  • ハッシュタグの「ー(ハイフン)」を「_(アンダースコアー)」へ
  • URL1件投稿時の最大文字数対応(必要に応じてハッシュタグ部分を削減で対応)
  • めざましじゃんけん固有
    • DBより最新のめざましじゃんけん結果を取得
    • ハッシュタグ時に不要なキーワードを削除
      「アナウンサー」「○○さん」「生じゃんけん!」
<?php
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
define("TARGET_TWEET",0);
##TARGET_TWEET 0 is newest record
$host_name = '127.0.0.1:3307';
$user_name = '@DB_User@';
$password = '@DB_Pass@';
$database_name ='@DB_Name@';
$table_name = '@DB_Table@';

function postTweet($value1, $value2) {
    $consumerKey = "@consumerKey@";
    $consumerSecret = "@consumerSecret@";
    $accessToken = "@accessToken@";
    $accessTokenSecret = "@accessTokenSecret@";
    $tweet_text = $value1.PHP_EOL.$value2;
    //文字数 URL=11.5文字、全角140文字、半角のみ280文字
    $url_char = strlen('https://www.miki-ie.com/mezamashi-jyanken/');
    $max_char = 280 + $url_char - 11.5;
    while(strlen($tweet_text) > $max_char){
        $tweet_text = mb_strrchr($tweet_text,'#',true,'UTF-8');
    }
    $twitter = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
    $result = $twitter->post(
     "statuses/update",
             array("status" => $tweet_text)
                );
    if($twitter->getLastHttpCode() == 200) {
        return true;
    } else {
        return false;
    }
}

$mysqli = new mysqli($host_name, $user_name, $password, $database_name);
if ($mysqli->connect_error) {
echo$mysqli->connect_error;
exit();
} else {
$mysqli->set_charset("utf8");
}
$table = "";
$sql = "SELECT id, times, tv, who FROM janken order by datetime desc limit 30";
if ($result = $mysqli->query($sql)) {
    $result = $mysqli->query($sql);
    $counter = 0;
while ($row = $result->fetch_assoc()) {
        if ($counter == TARGET_TWEET){
            $value1 = "【".$row["times"]."戦目】めざましじゃんけん結果速報:".PHP_EOL;
            if($row["tv"] == 1){
                $value1 = $value1."グー(Goo)"."でした。パーが勝ちです。";
            }elseif($row["tv"] == 2){
                $value1 = $value1."チョキ(Chyoki)"."でした。グーが勝ちです。";
            }else{
                $value1 = $value1."パー(Pa)"."でした。チョキが勝ちです。";
            }
            $value1 = $value1.PHP_EOL."今回の相手:".$row["who"];
            $who = $row["who"];
            $num_week = date('w', strtotime($row["datetime"]));
        }
        $counter++;
}
$result->close();
}
$mysqli->close();

$who = str_replace('さん','',$who);
$who = str_replace('アナウンサー','',$who);
$who = str_replace('リポーター','',$who);
$who = str_replace('キャスター','',$who);
$who = str_replace('生じゃんけん!','',$who);
//全角スペースを半角スペースに変換、句読点やカッコも半角スペースに変換
$who = str_replace(' ', ' ', $who);
$who = str_replace('、', ' ', $who);
$who = str_replace('(', ' ', $who);
$who = str_replace(')', ' ', $who);
//前後のスペース削除
$who = trim($who);
//連続する半角スペースを半角スペースひとつに変換
$who = preg_replace('/\s+/', ' ', $who);
//半角スペースで分割
$whos = explode(' ',$who);
$addhash = "";
if($num_week == 6) $addhash = " #めざましどようび";
foreach($whos as $this_who){
    $this_who = str_replace('-', '_', $this_who);
    $addhash = $addhash." #".$this_who;
}
$addhash2 = "";
$addhash_ary = array("機械学習", "AI", "深層学習", "DNN", "Darknet", "YOLO", "mikiie", "みきいえ", "ニューラルネットワーク");
shuffle($addhash_ary);
foreach($addhash_ary as $this_hash){
    $addhash2 = $addhash2." #".$this_hash;
}
$value2 = "By https://www.miki-ie.com/mezamashi-jyanken/".PHP_EOL." #めざましじゃんけん #めざましテレビ #人工知能".$addhash.$addhash2." ";
postTweet($value1, $value2);
?>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA