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

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

ただいまの
回答率

90.51%

  • PHP

    24035questions

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

PHPでツイートをDLしようとするとUndefined property: stdClassというエラーが出ます

受付中

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 90

810ya

score 0

前提・実現したいこと

PHPでツイートをダウンロードし、CSVに出力しようとしています。
実行すると以下のようなエラーメッセージが出ました。

発生している問題・エラーメッセージ

Notice: Undefined property: stdClass::$statuses in C:\xampp\htdocs\getgettweet.php on line 20

該当のソースコード

<?php
require "twitteroauth-master\autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

$consumerKey = "xxxxx";
$consumerSecret = "xxxxx";
$accessToken = "xxxxx";
$accessTokenSecret = "xxxxx";

$twitter = new TwitterOAuth ($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret) ;

$tweets_params = ['q'=>'検索語',
'since'=>'2019-04-01_00:00:00_JST',
'until'=>'2019-04-30_23:59:59_JST',
'count'=>'100',];

$result = $twitter->get (
"search/tweets",$tweets_params) ;

foreach ((array)$result->statuses as $tweet)
{
$t = $tweet->created_at;
$timestamp = strtotime ($t) ;
$timestamp = $timestamp+25200;
$jp_time = date ('sY:m:d_H:i', $timestamp) ;

print $tweet->user->screen_name."<br>\n";
print $tweet->text."<br>\n".$jp_time."<br>\n"."<br>\n";

}

?>

試したこと

stasusesと書いてあるところを消してみたりしました。

補足情報(FW/ツールのバージョンなど)

ちゃんと調べれば解決できるような初歩的なミスなのだと思うのですが、基礎から理解できておらず調べ方も分からない状態です。初歩的な質問で申し訳ありませんがどなたかお力をお貸しください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2019/05/15 21:57

    >ちゃんと調べれば解決できるような

    と書いてる間に調べられること試せることはたくさんあるので、なるべくやりつくしてから質問されたほうが良いです。

    キャンセル

回答 2

0

ほぼ同じ検索について書いている人がいますが、こちらは参考にされましたか?
https://qiita.com/kumasun/items/70f035a7d214d69d62c1#%E3%83%84%E3%82%A4%E3%83%BC%E3%83%88%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/15 23:16

    回答ありがとうございます。
    そちらも読んでいましたがエラーの原因になっている(と思われる)データの書き出しの部分については言及がなかったので直すことが出来ませんでした。

    キャンセル

0

PHP Notice:  Undefined property: 

意訳:そんなプロパティはないよ

foreach ((array)$result->statuses as $tweet)

つまり、$resultオブジェクトにstatusesプロパティが存在しないことを指します。

状況再現できるミニマムコード

<?php
class hoge{
    public $test = "hoge";
}

$h = new hoge;
var_dump($h->a);

foreachの前で$resultをvar_dump()で確かめてみては如何でしょうか。
利用できるプロパティが出力されるはずです。

Githubのコード確認したところ、確かにstatusesというプロパティはないように見受けられます。

もしかしたら$resultが正しく取得できていないかもしれないので、$resultに対してデバッグかけてみて、その結果で次にどうするかを考えると良いです。
コードを追っていったら分かりますが、最終的にはcurlのresponseを受け取っているので、そのレスポンスに当該プロパティが未定義となったということは「正しく取得できていない」ということが推察されます。

そのあたりはドキュメントこっちは日本語訳かな)確認して、「レスポンスが正しく取得できない時」にどういう情報が返ってくるのかを調べ、「必ず正しく取得できる前提ではない」プログラムにすると良いと思います。
(実行結果でsetHttpCode()とかしているのでhttpステータスは取得できると思います)

あとは(array)$result->statusesのarrayキャストをしているので、おそらくforeach内で$tweet内のプロパティも->ではアクセスできなくなっているように思います。

ざっとこんな感じで

<?php
class hoge{
    public $test;
    function __construct (){
        $this->test = new hoge2;
    }
}
class hoge2{
    public $hoge2_test1 = 1;
    public $hoge2_test2 = 2;
    public $hoge2_test3 = 3;
}

$h = new hoge;
echo $h->test->hoge2_test1;
// 1
$h_ar = (array)$h->test;
var_dump($h_ar); 
/*
array(3) {
  ["hoge2_test1"]=>
  int(1)
  ["hoge2_test2"]=>
  int(2)
  ["hoge2_test3"]=>
  int(3)
}
*/
echo $h_ar->hoge2_test1;
//PHP Notice:  Trying to get property 'hoge2_test1' of non-object

//↓配列なのでこっちなら出る
//echo $h_ar["hoge2_test1"];
//1


※エラーがあるのでecho $h->test->hoge2_test1;var_dump($h_ar); も出力されないかもしれませんので動作確認したいときは$h_ar->hoge2_test1のechoの1行はコメントアウトしてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • PHP

    24035questions

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