

file_get_contents関数を使って書かれたコードをPHPのcurl関数で書き変えているのですが,

[code]

    Warning: Illegal string offset 'access_token'
    
[/code]

というメッセージが出てtwitterのtweetを取得できません。解決方法が分かる方、回答をお願いします。

全体のコードのリンクです。  
<https://github.com/sizaki30/TwitterAppOAuth/blob/master/TwitterAppOAuth.php>

この方のサイトを参考にtweetを取得するサイトを作っています。  
[Twitter API search/tweets で
100件以上のツイートを取得する（PHP）](https://blog.apar.jp/php/3007/)

curlについて参考にしたサイトです。  
[phpでfile_get_contentsからcurlに移行する -
Qiita](https://qiita.com/Tamagoham119/items/0862d12743ddd8175d6d#%E7%A7%BB%E8%A1%8C%E3%81%99%E3%82%8B)  
[APIなどにfile_get_contents()を使うのはオススメしない理由と代替案 -
Qiita](https://qiita.com/shinkuFencer/items/d7546c8cbf3bbe86dab8)

[code]

    private function _getBearerToken($consumer_key, $consumer_secret){
        $oauth2_url = 'https://api.twitter.com/oauth2/token';
        $token = base64_encode(urlencode($consumer_key) . ':' . urlencode($consumer_secret));
    
        $request = array(
            'grant_type' => 'client_credentials'
        );
        $header = [
            'Content-type: application/x-www-form-urlencoded;charset=UTF-8',
            'Authorization: Basic ' . $token,
        ];
    
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $oauth2_url); 
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($request));
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HEADER, true);
    
        $response_arr = curl_exec($curl);
        curl_close($curl);
        return $response_arr['access_token'];//ここでWarning:が出る
        }
    
        public function get($api, $params = array())
        {
            $api_url = 'https://api.twitter.com/1.1/' . $api . '.json';
    
            if ($params) {
                $request = http_build_query($params, '', '&', PHP_QUERY_RFC3986);
                $api_url .= '?' . $request;
            }
    
            $header = [
              'Authorization: Bearer ' . $this->_bearer_token,
            ];
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $api_url);
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($request));
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_HEADER, true);
    
            $response_json = curl_exec($curl);
            curl_close($curl);
            return $response_json;
        }
    
[/code]


CC BY-SA 4.0
2018-11-14T10:57:32.080
50322
2022-09-20T02:46:50.250
2022-09-20T02:46:50.250
3060
30986
question
php php-curl
phpのfile_get_contents関数をPHPのcurl関数で書き変えたい


こんな感じではいかがでしょうか？  
SSLの認証でエラーが出る場合があるので`CURLOPT_SSL_VERIFYPEER`を`false`にしておくことをお勧めします。

[code]

    $request = array(
            'grant_type' => 'client_credentials'
        );
    $header = [
        'Content-type: application/x-www-form-urlencoded;charset=UTF-8',
        'Authorization: Basic ' . $token,
    ];
    
    
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $oauth2_url);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($request));
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, true);
    
    $response_json = curl_exec($curl);
    curl_close($curl);
    
[/code]


CC BY-SA 4.0
2018-11-16T06:58:53.373
50376
2018-11-16T06:58:53.373
7676
50322
answer