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

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

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

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

PHP

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

Q&A

解決済

1回答

568閲覧

TwitterAPIでDMの取得が出来ない

otftrough

総合スコア476

Twitter

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

PHP

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

0グッド

0クリップ

投稿2019/06/14 08:39

PHPでTwitterのDMを取得したいのですが、403エラーが返ってきます。
パラメーターなしでも取得出来るとのことでしたので、一応なしで取得してみようとしましたが、
うまくいきません。
パラメータ["count" => "20"]をつけても変わりませんでした。
どうすれば取得できますでしょうか。

送信は出来ましたので、トークンが間違っているとか、認証がうまくいっていないとかではないと思います。
使っているライブラリはTwitterOAuthです。
下記のPHPは、送信と取得の機能があります。

PHP

1<?php 2 require_once("twitteroauth/autoload.php"); 3 use Abraham\TwitterOAuth\TwitterOAuth; 4 5 if(isset($_POST['mode'])) 6 { 7 $userId = 0000000000000000; //DMを送る相手のユーザーID 8 9 //0,1がアプリケーションのトークン、2,3がユーザーのトークン 10 $keys = array( 11 0 => 'uwQK1p8oiiCjhQRYfltvDVswn', 12 1 => 'zf6fKwVah0Nib3hyPMA0Y6anWYpUxQf7uiwviRiCNi8NdnUXs9', 13 2 => $_POST['t1'], 14 3 => $_POST['t2'] 15 ); 16 $con = new TwitterOAuth($keys[0], $keys[1], $keys[2], $keys[3]); 17 18 if($_POST['mode'] == "send") //DMの送信 19 { 20 $text = urldecode($_POST['t0']); //送信するテキスト 21 22 //パラメータはネットからのコピペなのでよくわからないがとりあえず動いてるからOK 23 $con->post('direct_messages/events/new', [ 24 'event' => [ 25 'type' => 'message_create', 26 'message_create' => [ 27 'target' => [ 28 'recipient_id' => $userId 29 ], 30 'message_data' => [ 31 'text' => $text 32 ] 33 ] 34 ] 35 ], true); 36 //ステータスコード200以外はエラーとする 37 if($con -> getLastHttpCode() != 200) 38 { 39 echo 'http error ' . $con -> getLastHttpCode(); 40 } 41 else 42 { 43 echo "ok"; 44 } 45 } 46 else if($_POST['mode'] == "get") //DM取得 ← できてない 47 { 48 $res = $con->get('direct_messages/events/list'); //とりあえずパラメータなしで送る。 49 if($con -> getLastHttpCode() != 200) 50 { 51 //403エラーが返っていた。詳細なエラー内容の確認方法がわからない。 52 //$resの中身は確認できなかった。nullなのかな? 53 echo 'http error ' . $con -> getLastHttpCode(); 54 } 55 else 56 { 57 foreach ($res -> events as $value) 58 { 59 echo $value -> id . "\r\n" . $value -> text . "\r\n"; 60 } 61 } 62 } 63 } 64?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

ダイレクトメッセージの取得権限があるか確認してください
Read, write, and Direct Messagesにチェックが無いと取得できないです

https://developer.twitter.com/apps

appstwitter

追記:送信はできるとのことで見落としていました
追記2:こちらで同様のコードを動かしてみましたが、問題なく動作しました

print_r($con->getLastBody());

でレスポンスを確認してみてください

投稿2019/06/16 03:16

編集2019/06/16 03:27
39ff

総合スコア284

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

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

otftrough

2019/06/17 00:44

ありがとうございます。 確かにダイレクトメッセージの許可がありませんでした。 ダイレクトメッセージを許可しましたが反映に時間がかかってるのか、まだアクセスできないようです。 また報告します。
otftrough

2019/06/17 05:28

アプリケーションの設定変更後、再度新しいトークンの発行とユーザーのOAuth認証をしたらうまくいきました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問