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

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

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

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

Q&A

2回答

2285閲覧

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

810ya

総合スコア12

PHP

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

0グッド

1クリップ

投稿2019/05/15 12:36

前提・実現したいこと

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

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

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

該当のソースコード

PHP

1<?php 2require "twitteroauth-master\autoload.php"; 3use Abraham\TwitterOAuth\TwitterOAuth; 4 5$consumerKey = "xxxxx"; 6$consumerSecret = "xxxxx"; 7$accessToken = "xxxxx"; 8$accessTokenSecret = "xxxxx"; 9 10$twitter = new TwitterOAuth ($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret) ; 11 12$tweets_params = ['q'=>'検索語', 13'since'=>'2019-04-01_00:00:00_JST', 14'until'=>'2019-04-30_23:59:59_JST', 15'count'=>'100',]; 16 17$result = $twitter->get ( 18"search/tweets",$tweets_params) ; 19 20foreach ((array)$result->statuses as $tweet) 21{ 22$t = $tweet->created_at; 23$timestamp = strtotime ($t) ; 24$timestamp = $timestamp+25200; 25$jp_time = date ('sY:m:d_H:i', $timestamp) ; 26 27print $tweet->user->screen_name."<br>\n"; 28print $tweet->text."<br>\n".$jp_time."<br>\n"."<br>\n"; 29 30} 31 32?> 33

試したこと

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

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

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

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

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

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

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

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

m.ts10806

2019/05/15 12:57

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

回答2

0

PHP Notice: Undefined property:

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

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

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

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

php

1<?php 2class hoge{ 3 public $test = "hoge"; 4} 5 6$h = new hoge; 7var_dump($h->a);

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

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

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

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

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

ざっとこんな感じで

php

1<?php 2class hoge{ 3 public $test; 4 function __construct (){ 5 $this->test = new hoge2; 6 } 7} 8class hoge2{ 9 public $hoge2_test1 = 1; 10 public $hoge2_test2 = 2; 11 public $hoge2_test3 = 3; 12} 13 14$h = new hoge; 15echo $h->test->hoge2_test1; 16// 1 17$h_ar = (array)$h->test; 18var_dump($h_ar); 19/* 20array(3) { 21 ["hoge2_test1"]=> 22 int(1) 23 ["hoge2_test2"]=> 24 int(2) 25 ["hoge2_test3"]=> 26 int(3) 27} 28*/ 29echo $h_ar->hoge2_test1; 30//PHP Notice: Trying to get property 'hoge2_test1' of non-object 31 32//↓配列なのでこっちなら出る 33//echo $h_ar["hoge2_test1"]; 34//1

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

投稿2019/05/16 00:46

編集2019/05/16 01:06
m.ts10806

総合スコア80850

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

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

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 12:42

mather

総合スコア6753

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

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

810ya

2019/05/15 14:16

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問