twitter apiを使ったphpのソースを公開したが重要な欠陥に気づいて非公開にした。
そして修正しているうちに認証できなくなってしまった。
調べているとoauthで使用しているtwitteroauthが更新されていたので、
アップデートがてら作り直すことにした。
最新リリースを持ってくる。
https://github.com/abraham/twitteroauth/releases
0.7.4が去年の7/1にリリースされていた。
今のバージョンはなんだろうと見てみるとバージョンが書かれている場所がわからないが
ファイルのタイムスタンプが 2015 8/19なので0.5.4だ。クソ古い。
解凍の仕方も忘れている。
tar -zxvf 0.7.4.tar.gz
参考
https://qiita.com/sofpyon/items/982fe3a9ccebd8702867
自分のkeyを定義したphpファイルを作る。
common.php
これは前に作ったものをそのまま使える。
login.php
上記サイトのソースがコメントまで同じだ。
前回もこの人のを参考にしたのか?
requireのパスだけ今回のものに変える。
mypage.php
を作って動かす。
http error 500になる。
下記2行をソースの最初に書いてエラーメッセージを表示させる。
ini_set("display_errors", On);
error_reporting(E_ALL);
Notice: Undefined index: access_token in /var/www/html/ssl/bl/mypage.php on line 14 Parse error: syntax error, unexpected '[' in /var/www/html/ssl/bl/twitteroauth-0.7.4/src/TwitterOAuth.php on line 128
これはphpのバージョンが古いために出るらしい。
今のphpのバージョンは5.3.3
自動アップデート(名前は忘れた)しているがphpは上がっていない。
レポジトリを変えないとダメなようだ。
こちらを参考にphpをアップデート
https://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e
バージョンを確認...... 変わってない!
apacheを再起動しないとダメだそうだ。
service httpd restart
変わった。
今度は以下のエラー。
Notice: Undefined index: access_token in /xxxx/mypage.php on line 14
object(stdClass)#3 (1) { ["errors"]=> array(1) { [0]=> object(stdClass)#7 (2) { ["message"]=> string(53) "Your credentials do not allow access to this resource" ["code"]=> int(220) } } }
twitteroauth, phpのバージョンをあげる前と同じだ。
許可されていないAPIを呼び出した時などに出るエラーのようだが、
アクセストークンを取り出しているだけだ。
APIの利用制限に引っかかったのか?
このブログを検索
2018/01/28
2016/05/02
PHP twitteroauth ブロックしているユーザーのアンブロック
ブロック解除もできた。
(前回 http://blog.monqy.net/2016/05/php-twitteroauth.html の続き)
--------------------------------------
#ブロックしているユーザーを取得
$req2 = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/list.json','GET',array('count'=>'100'));
$blocks = json_decode($req2,true);
if (isset($blocks) && empty($blocks->errors)) {
echo '<hr>';
foreach ($blocks as $val) {
for($i = 0; $i<count($val)-1;$i++)
{
echo
$val[$i]['name'] . '<br>'
. '<img src="' . $val[$i]['profile_image_url'] . '"><br>'
. $val[$i]['screen_name'] . '<br>'
. '<hr>';
#ブロックしているユーザーのscreen_nameをarrayに格納
$blocking_users[] = $val[$i]['screen_name'];
}
}
} else {
echo 'you are blocking nobody.';
}
#スクリプトに引数「mode=unblock」が指定された場合はunblockする
if(isset($_GET['mode'])) {
if ($_GET['mode'] == 'unblock') {
foreach($blocking_users as $a) {
$result = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/destroy.json','POST',array('screen_name'=>$a));
$j = json_decode($result,true);
if (isset($j)) {
echo $j['screen_name']." is unblocked.<br>";
}
}
}
}
----------------------------------------------
OAuthRequestの後にAPIのURLを指定すればなんでもできるようだ。
$result = $connection->OAuthRequest(<URL>,<メソッド>,<パラメータ>);
(前回 http://blog.monqy.net/2016/05/php-twitteroauth.html の続き)
--------------------------------------
#ブロックしているユーザーを取得
$req2 = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/list.json','GET',array('count'=>'100'));
$blocks = json_decode($req2,true);
if (isset($blocks) && empty($blocks->errors)) {
echo '<hr>';
foreach ($blocks as $val) {
for($i = 0; $i<count($val)-1;$i++)
{
echo
$val[$i]['name'] . '<br>'
. '<img src="' . $val[$i]['profile_image_url'] . '"><br>'
. $val[$i]['screen_name'] . '<br>'
. '<hr>';
#ブロックしているユーザーのscreen_nameをarrayに格納
$blocking_users[] = $val[$i]['screen_name'];
}
}
} else {
echo 'you are blocking nobody.';
}
#スクリプトに引数「mode=unblock」が指定された場合はunblockする
if(isset($_GET['mode'])) {
if ($_GET['mode'] == 'unblock') {
foreach($blocking_users as $a) {
$result = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/destroy.json','POST',array('screen_name'=>$a));
$j = json_decode($result,true);
if (isset($j)) {
echo $j['screen_name']." is unblocked.<br>";
}
}
}
}
----------------------------------------------
OAuthRequestの後にAPIのURLを指定すればなんでもできるようだ。
$result = $connection->OAuthRequest(<URL>,<メソッド>,<パラメータ>);
PHP + twitteroauth ブロックしているユーザーの一覧表示
ついにできた。
(全体は下記を参照)
http://blog.monqy.net/2016/05/phptwitter-api-oauth.html
<?php
session_start();
require_once 'common.php';
require_once 'vendor/abraham/twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
$access_token = $_SESSION['access_token'];
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_s
ecret']);
$user = $connection->get("account/verify_credentials");
echo 'hello, ';
echo $user->name;
$req2 = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/list.json','GET',array('count'=>'100'));
$blocks = json_decode($req2,true);
if (isset($blocks) && empty($blocks->errors)) {
echo '<hr>';
foreach ($blocks as $val) {
for($i = 0; $i<count($val)-1;$i++)
{
echo
$val[$i]['name'] . '<br>'
. '<img src="' . $val[$i]['profile_image_url'] . '"><br>'
. $val[$i]['screen_name'] . '<br>'
. '<hr>';
}
}
echo '<hr>';
} else {
echo 'you are blocking nobody.';
}
?>
(全体は下記を参照)
http://blog.monqy.net/2016/05/phptwitter-api-oauth.html
<?php
session_start();
require_once 'common.php';
require_once 'vendor/abraham/twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
$access_token = $_SESSION['access_token'];
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_s
ecret']);
$user = $connection->get("account/verify_credentials");
echo 'hello, ';
echo $user->name;
$req2 = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/list.json','GET',array('count'=>'100'));
$blocks = json_decode($req2,true);
if (isset($blocks) && empty($blocks->errors)) {
echo '<hr>';
foreach ($blocks as $val) {
for($i = 0; $i<count($val)-1;$i++)
{
echo
$val[$i]['name'] . '<br>'
. '<img src="' . $val[$i]['profile_image_url'] . '"><br>'
. $val[$i]['screen_name'] . '<br>'
. '<hr>';
}
}
echo '<hr>';
} else {
echo 'you are blocking nobody.';
}
?>