TwitterAPIでWebサービスを作りたい

こんにちは。ちょっと前にPythonとtweepyでにじさんじライバーをフォローするコードを書いたのですが、今度はブロックしたくなりました。


いや、情緒不安定とかじゃなくて自分なりの好きが成長した結果グッズが欲しくなったんですよね。
ところでにじさんじのグッズにはブラインド販売(中身がランダム)なものが結構あって、推しを自引きするのは大変です。そこでグッズ取引という行為をするのですが、この界隈は推しもTwitterを見ています。本人の目の前でグッズを交換するようなものです。申し訳なさすぎる。
そのため、にじさんじグッズ取引界隈ではライバーたちをブロックすることがマナーになってい(るように感じ)ます。
よ~~しやんぞ!!!て思ったんですけど、ライバー100人以上いるんですよね、、、だる、、、だるくないか・・・・?
その程度のメンタルかよって思われたら申し訳ないんですけど、楽するツール作るのに5時間ぐらいかかったので許してください。

必要なものたち

・TwitterAPIの権限(以前獲得したので省略)
・PHP
・Twitterouath
・(そのためのComposer)
・サーバ
・根気

導入①:PHPとXAMPP

PHPなんて知りません。XAMPPを導入しました。これすごい便利ですね。PHPとローカルサーバを獲得です。
VScodeで書きたいので拡張機能も適当に入れました。

XAMPPのコントロールパネルからApacheをスタートさせて適当に書いたコードを”xampp>htdocs>2j3j”内に”test.php”で保存して、”http://localhost/2j3j/test.php”にアクセスすると、、、

<?php
echo "inu";
?>

めちゃくちゃ嬉しいな・・・。犬、、、、

導入②:ComposerとTwitterouath

PHPにはライブラリというのがあって、これをいれるといろいろ出来るっぽいです。なくてもできる説はありますが楽そうなので導入します。

Composerを公式のインストーラーから導入しました。パスとかやってくれるのありがたすぎるんだよな。。。
Twitterouath はComposerを利用して導入します。2j3jフォルダ内に”composer.phar”とvendorフォルダができます。
(*後述しますがここら辺めちゃくちゃ詰まって2時間ぐらい浪費してもう何やったか覚えてない。しんどい)

<?php
// TwitterOAuthライブラリを読み込み
require 'vendor/autoload.php';
// TwitterOAuthクラスをインポート
use Abraham\TwitterOAuth\TwitterOAuth;

define( 'C_TWITTER_KEY_CK', '++++++++' );  //Consumer Key (API Key)
define( 'C_TWITTER_KEY_CS', '++++++++' );  //Consumer Secret (API Secret)
define( 'C_TWITTER_KEY_AT', '++++++++' );  //Access Token
define( 'C_TWITTER_KEY_ATS', '++++++++' ); //Access Token Secret

// TwitterOAuthオブジェクト生成
$toa = new TwitterOAuth(constant('C_TWITTER_KEY_CK'),constant('C_TWITTER_KEY_CS'),constant('C_TWITTER_KEY_AT'),constant('C_TWITTER_KEY_ATS'));

$result = $toa->post("statuses/update", array("status" => "wan"));

?>


感動。

ずっとネットから引っ張ってきたコードを継ぎはぎしているのですが、どうやら一部間違っていたみたいで(記載のコードは正しいです)エラー出るけど環境のせいだと思ってめちゃくちゃいじいじしていました。吠えるだけで2時間かかることある????

実装①:ログインとか

今回はいろんな人がログインして利用できる感じにしたかったので(そうしないと取引垢で使えないもんね・・・)ログイン画面を用意します。なんかトークンとかコールバックとかわからんことばっかなので神サイトを参考にコピペしました。だけ変えたら使えます。すごい。実装#とは

実装②:本題

HTMLの部分、ほとんど前述のサイトです。すいません。</br>みたいなんしか知らんもん;;

<?php
session_start();

require_once 'vendor/autoload.php';

use Abraham\TwitterOAuth\TwitterOAuth;

// アクセストークンを取得
$access_token = $_SESSION['access_token'];
$connection = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $access_token['oauth_token'], $access_token['oauth_token_secret']);

//ユーザー情報取得
$user = $connection->get('account/verify_credentials');
$friendIds =  $connection->get('friends/ids', ['screen_name' => 'nijisanji_app']);

if(!empty($_POST)){
    if(isset($_POST['tweet'])){
        // ブロックする
        $tweet = $_POST['tweet'];
        $connection->post('statuses/update', ['status' => $tweet]);

        foreach ($friendIds->ids as $i => $id) {
            $connection->post('blocks/create', ['user_id' => $id]);
        }
   }elseif(isset($_POST['follow'])){
        // フォローする
        $message = $_POST['follow'];
        $result = $connection->post('statuses/update', ['status' => $message]);
        foreach ($friendIds->ids as $i => $id) {
            $connection->post('friendships/create', ['user_id' => $id]);
        }
   }elseif(isset($_POST['unblock'])){
        // ブロ解する
        $message = $_POST['unblock'];
        $result = $connection->post('statuses/update', ['status' => $message]);
        foreach ($friendIds->ids as $i => $id) {
            $connection->post('blocks/destroy', ['user_id' => $id]);
        }
    }
}

// タイムラインを取得
$timeline = $connection->get('statuses/user_timeline', ['count' => 3]);

?>
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

    <title>Twitter App</title>
  </head>
  <body>
    <div class="container mt-4 mb-4">
        <h4>ユーザー</h4>
        <div class="row">
            <div class="col-sm-8">
            <img src="<?=$user->profile_image_url_https?>">
            <span><?=$user->name?>(@<?=$user->screen_name?>)</span>
            </div>
        </div>
    </div>

    <div class="container mb-4">
        <h4>やれること</h4>
        テキストボックス内の文字列をツイートしつつブロックしたりします。
    </div>

    <div class="container mb-4">
        <h4>ブロック</h4>
        <form action="/2j3j/app.php" method="post">
        <textarea rows="3" cols="100" name="tweet">ブロックしました;;</textarea>
            <input type="submit" value="ブロックする"/>
        </form>
    </div>

    <div class="container mb-4">
        <h4>ブロック解除</h4>
        <form action="/2j3j/app.php" method="post">
            <textarea rows="3" cols="100" name="unblock">ブロックを解除しました</textarea>
            <input type="submit" value="ブロ解する"/>
        </form>
    </div>
    
    <div class="container">
        <h4>フォロー</h4>
        <form action="/2j3j/app.php" method="post">
            <textarea rows="3" cols="100" name="follow">フォローしました</textarea>
            <input type="submit" value="フォローする"/>
        </form>
    </div>

  </body>
</html>

ブロックとブロ解とフォローができます。Twitterouath 敷居高いなあと思ったけどTwitterAPIの公式サイト参考にできてめっちゃ良いね。

その後

これを公開したいな~て思ったんだけどサーバとかよくわからんし、(ここのサーバも友人がいろいろやってくれたので)めちゃくちゃ困ったしめんどくさくなってやめた。そんで遊んでたんですけど・・・

こんなことある???????

悲しすぎる半泣きでメールした許してTwitter君;;僕悪い人じゃないよ;;

感想

ガチしんどかったです。導入が怖くない人はやってみてください。でもTwitterouath 楽しいかもしれない。Tweepyよりは使いやすいかなあとなんとなく思いました。みんなも凍結には気を付けよう!

コメントを残す

メールアドレスが公開されることはありません。