PHPからツイートを投稿する らぼったあ開発雑記8日目

シェアする

らぼったあ開発雑記 8日目の記事です。
今日は、PHPからツイートを投稿してみます。




ライブラリの使用例を確認

まずは触ってみないとわからないため、TwitterOAuth PHP Library for the Twitter REST API の使用例のページにアクセスし動作を見ました。

CONSUMER_KEYとCONSUMER_SECRET、OAUTH_CALLBACKを設定します。
OAUTH_CALLBACKは、「Callback URL」で設定したURLを入力しないとエラーが返ってきます。私はアプリ側のCallback URLの設定を「http://172.0.0.1/xxx」に書き換えて対応しました。

これらのパラメータを用いて、Twitter認証用のURLを組み立てるようです。

URLにアクセスし認証に成功すると、access_token(oauth_token_secretとoauth_token_secret)がTwitterからもらえます。

あとは、APIを使うときにaccess_tokenを一緒に渡してあげればTwitterへのツイート投稿などできそうです。

実装してみる

config.php
コンシューマーキーなどは別ファイルに記載。

<?php

define('CONSUMER_KEY', 'hogehoge');
define('CONSUMER_SECRET', 'fugafuga');
define('OAUTH_CALLBACK', 'http://127.0.0.1/haguhagu/');

login.php
最初にアクセスするページ

<?php
session_start();

require "vendor/autoload.php";
require_once 'config.php';
use Abraham\TwitterOAuth\TwitterOAuth;

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);

$request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK));

$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];

$url = $connection->url('oauth/authorize', array('oauth_token' => $request_token['oauth_token']));

header( 'location: '. $url );

index.php
認証が終わるとユーザの情報を表示するページ

<?php
ini_set('display_errors', "On");
session_start();

require_once 'config.php';
require "vendor/autoload.php";

use Abraham\TwitterOAuth\TwitterOAuth;

$request_token = [];
$request_token['oauth_token'] = $_SESSION['oauth_token'];
$request_token['oauth_token_secret'] = $_SESSION['oauth_token_secret'];

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);

// access_tokenを取得する
$access_token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $_REQUEST['oauth_verifier']]);
$_SESSION['access_token'] = $access_token;

// access_tokenを使ってTwitter APIを叩く
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
$user = $connection->get('account/verify_credentials', ['tweet_mode' => 'extended', 'include_entities' => 'true']);

var_dump($user);

あとがき

Twitterの認証が終わったら、すぐaccess_tokenが取れるわけではなくて、access_tokenを取得するための処理が必要みたいですね。そこに気づかず時間を溶かしてしまった。

あとaccess_tokenをDBか何かに保存しないと、サービスを使うたびにログインしないといけないですね。既存バージョンはどうやって処理していたっけな。。。