質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

5159閲覧

TwistOAuthの読み込みでエラーになります

naoki855

総合スコア75

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

2グッド

0クリップ

投稿2016/03/29 13:06

編集2016/03/29 16:12

自主学習として、Twitter_botを製作しています。
開発環境はMAMP(PHP 5.6.10)です。
また、種々の理由からComposerでインストールするTwitterOAuthではなく、直接ダウンロードできるTwistOAuthを利用することにしました。
(こちらのサイトです。→https://github.com/mpyw/TwistOAuth)

TwistOAuthのpharファイルをrequireすると、以下が表示されます。

localhost ページは機能していません
localhost では現在このリクエストを処理できません。
500

これは、pharファイルの読み込みが悪いのでしょうか?
それとも、全く別の要因でしょうか?
申し訳ありませんが、宜しくお願い致します。
(以下にソースコードを記載します。)

php

1<?php 2require 'TwistOAuth.phar'; 3 4define('CONSUMER_KEY', 'CY'); 5define('CONSUMER_SECRET', 'CS'); 6define('ACCESS_TOKEN', 'AT'); 7define('ACCESS_TOKEN_SECRET', 'AS'); 8 9$header = 'Content-Type: text/plain; charset=utf-8'; 10 11$to = new TwistOAuth('CONSUMER_KEY', 'CONSUMER_SECRET', 'ACCESS_TOKEN', 'ACCESS_TOKEN_SECRET');

★2016-03-29 23:08 追記
MAMPのphp_error.logを確認しました。

sh

1[29-Mar-2016 23:07:09 Asia/Tokyo] PHP Fatal error: Uncaught exception 'TwistException' with message 'Invalid or expired token.' in phar:///Applications/MAMP/htdocs/twitter_bot/TwistOAuth.phar/TwistOAuth.php:831 2Stack trace: 3#0 phar:///Applications/MAMP/htdocs/twitter_bot/TwistOAuth.phar/TwistOAuth.php(352): TwistOAuth::decode(Resource id #5, '{"errors":[{"co...') 4#1 /Applications/MAMP/htdocs/twitter_bot/bot.php(12): TwistOAuth->get('statuses/user_t...', 10) 5#2 {main} 6 thrown in phar:///Applications/MAMP/htdocs/twitter_bot/TwistOAuth.phar/TwistOAuth.php on line 831

エラー文を見ましたが、pharが悪い?くらいしか分からないので、取り急ぎ各PHPをrequireしてみます。

★2016-03-30 00:20 追記
いただいたご意見、および他のサイトも参考に、以下のようにコードを修正しました。

php

1<?php 2require 'TwistOAuth.php'; 3require 'TwistException.php'; 4 5define('CONSUMER_KEY', 'CY'); 6define('CONSUMER_SECRET', 'CS'); 7define('ACCESS_TOKEN', 'AT'); 8define('ACCESS_TOKEN_SECRET', 'AS'); 9 10$header = 'Content-Type: text/plain; charset=utf-8'; 11 12try { 13 $connection = new TwistOAuth('CONSUMER_KEY', 'CONSUMER_SECRET', 'ACCESS_TOKEN', 'ACCESS_TOKEN_SECRET'); 14 $res = $connection->post('statuses/update', [ 15 'status' => 'こんにちは' 16 ]); 17 header($header, true, 200); 18 echo "ツイートしました"; 19 } catch (Exception $e) { 20 header($header, true, $e->getCode() ?: 500); 21 echo "ツイート失敗: {$e->getMessage()}\n"; 22}

今度はInvalid or expired token.とエラーが出力されてしまいます。
デベロッパーサイトが発行したアクセストークンはいきているようです。
この場合、クッキーかなにかでトークンが置き換わってしまったのでしょうか?
(見当違いでしたら申し訳ありません。)

★2016-03-30 01:09 追記
いただいたご意見、および他のサイトも参考に、以下のようにコードを修正しました。

php

1<?php 2require 'TwistOAuth.php'; 3require 'TwistException.php'; 4 5define('CONSUMER_KEY', 'CY'); 6define('CONSUMER_SECRET', 'CS'); 7define('ACCESS_TOKEN', 'AT'); 8define('ACCESS_TOKEN_SECRET', 'AS'); 9 10$header = 'Content-Type: text/plain; charset=utf-8'; 11 12try { 13 $connection = new TwistOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); 14 $res = $connection->post('statuses/update', [ 15 'status' => 'こんにちは' 16 ]); 17 header($header, true, 200); 18 echo "ツイートしました"; 19 } catch (Exception $e) { 20 header($header, true, $e->getCode() ?: 500); 21 echo "ツイート失敗: {$e->getMessage()}\n"; 22}

申し訳ありません、ベストアンサーは迷いました。
ご納得いただけないかもしれませんが、何卒ご容赦ください。

yodel, ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

CONSUMERとか、TwistOAuthインスタンス生成時の引数は、シングルクウォートで括らなくてよいのです。

投稿2016/03/29 16:03

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naoki855

2016/03/29 16:07

ありがとうございます! できました!
mpyw

2016/03/29 16:30

tomohiro_obara さん なかなか気づきませんでした,ご指摘ありがとうございます.
guest

0

ベストアンサー

追記

エラー原因が特定出来たのでこちらに書きます. (相変わらず私が遭遇したエラーは不明ですが…)

PHP Fatal error: Uncaught exception 'TwistException' with message 'Invalid or expired token.'

単にトークンが無効であると言っているだけですね.実際のコードに$to->get()している部分が無いのかと思いきやエラーを見る限りはそう書いてあるということです.

なおTwistExceptionはトークンが無効である以外にも,Twitter側に障害が発生していたり,API規制にかかったときにも発生するので,TwistOAuthのメソッドを用いる部分は必ずtry { } catch (... $e) { }で括ってください.例外のクラス名にはTwistExceptionRuntimeException,Exception,Throwable(PHP7限定)のいずれかを指定してください.前のものほどキャッチ範囲が狭くなります.

(私が遭遇したエラーは不明で,pharをrequireするだけでPHPがクラッシュするというものでした)

原文

某無料ホスティングサーバでPharを読み込むと同様の現象に陥ることがありました.エラーも

<?php ini_set('display_errors', 1); error_reporting(-1);

としても一切吐かれず,エラーログファイルも残らないのでとても困っていました.直感ですが,ライブラリを構成する3ファイルを個別にrequireしたところ動作するようになりました.解決策としては

  1. 上記のようにsrcの3ファイルを個別にrequireする
  2. Composerでインストールする

のどちらかになりそうです.原因が断定出来ていないのが気持ち悪い…

投稿2016/03/29 13:48

編集2016/03/29 14:21
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mpyw

2016/03/29 14:00

もしApacheのエラーログが見れる場合は見てもらえませんか?私の場合は何も情報が残らなかったのですがダメもとで…
naoki855

2016/03/29 14:15 編集

ご返事いただき、ありがとうございます。 取り急ぎ、エラーログを吐かせてみました。 ただ、PHPのエラーログは残るものの、ご指摘の通り、apacheのエラーログはありませんでした。
naoki855

2016/03/29 15:29

ご回答、ありがとうございます。 やはり、Invalid or expired token.となり、トークンが無効になっているようです。 もしよろしければ、ソースを記載致しましたので、ご確認いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問