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

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

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

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

PHP

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

2242閲覧

PHPでTwitterAPIを用いてDMを送る手法について

Nanohana

総合スコア123

Twitter

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

PHP

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/05/16 07:19

PHP7.2を使ってます。
https://qiita.com/tetra-sol/items/32b144b5fff432a912fa#%E6%B3%A8%E9%87%88%E5%8F%82%E8%80%83%E3%82%B5%E3%82%A4%E3%83%88 を参考に
PHPでDMを送るプログラムを書いています。
しかしながら、レスポンスが以下の通りとなりうまくいきません。

PHP

1array( 2 'errors' => array( 3 (int) 0 => array( 4 'code' => (int) 32, 5 'message' => 'Could not authenticate you.' 6 ) 7 ) 8)

※XXX,YYY,ZZZ,OOOの部分は適切なものが入っており、同じキーでTweetはできていますし、
DMの権限は取得できています。イメージ説明

何が原因と思いますか?
($message_dataの中身は適切に設定できていることを確認しています。)

PHP

1private function dmcreater($uid,$message_data){ 2 $api_key = 'XXX'; 3 $api_secret = 'YYY'; 4 $access_token = 'ZZZ'; 5 $access_token_secret = 'OOO'; 6 $signature_key = rawurlencode( $api_secret )."&".rawurlencode( $access_token_secret ); 7 $paramData = array( 8 "oauth_token" => rawurlencode( $access_token ), 9 "oauth_consumer_key" => rawurlencode( $api_key ), 10 "oauth_signature_method" => rawurlencode( "HMAC-SHA1" ), 11 "oauth_timestamp" => time(), 12 "oauth_nonce" => microtime(), 13 "oauth_version" => rawurlencode( "1.0" ) 14 ); 15 $sig_param = rawurlencode('POST')."&". 16 rawurlencode('https://api.twitter.com/1.1/direct_messages/events/new.json')."&". 17 rawurlencode( http_build_query( $paramData , "", "&" ) ); 18 ksort( $paramData ); 19$signature = hash_hmac( "sha1", $sig_param, $signature_key, TRUE ); 20$signature = base64_encode( $signature ); 21$paramData['oauth_signature'] = $signature; 22$httpHeader = array( 23 'Authorization: OAuth '.http_build_query( $paramData, "", "," ), 24 'content-type: application/json' 25 ); 26 27 $postData = array( 28 "event" => array( 29 "type" => "message_create", 30 "message_create" => array( 31 "target" => array( 32 "recipient_id" => "$uid" //送信先ID 33 ), 34 "message_data" => $message_data 35 ) 36 ) 37 ); 38 debug($httpHeader); 39 $ch = curl_init(); 40 curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader); 41 curl_setopt($ch, CURLOPT_URL, 'https://api.twitter.com/1.1/direct_messages/events/new.json'); 42 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, rawurlencode('POST')); 43 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 44 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode( $postData )); 45 46 $json = curl_exec($ch); 47 curl_close($ch); 48 $response = json_decode( $json, true ); 49 debug($response); 50 return $response; 51}

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

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

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

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

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

m.ts10806

2020/05/16 07:25

そのエラーメッセージで検索すると出てくる記事では何が足らなかったのでしょうか。
guest

回答1

0

Could not authenticate you
なので、認証情報が間違いです。

投稿2020/07/01 01:11

herobo

総合スコア153

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問