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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Twitter

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

PHP

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

Q&A

解決済

1回答

1660閲覧

Laravel TwitterAPIでユーザー情報をオブジェクトで取得したが、「Undefined property」となってしまう

makiri2002

総合スコア13

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Twitter

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

PHP

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

1グッド

2クリップ

投稿2019/11/02 17:55

編集2019/11/03 10:53

前提・実現したいこと

TwitterAPI(TwitterOauth)で指定のユーザー情報を取得
→(DBに同じユーザーがいる前提で)情報を比較して変わっていた場合は更新したいです。

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

TwitterAPIでとってきたデータ(stdClassオブジェクト)にアクセスしようとすると、
「Undefined property: stdClass」と表示されてしまいます。

ErrorException (E_NOTICE) Undefined property: stdClass::$screen_name

該当のソースコード

//型はobject $twitter_user_info = \Twitter::get('users/show', array('user_id' => 1111)); $user = DB::where('twitter_id', 1111)->first(); //これがエラーになります if ($user->screen_name !== $twitter_user_info->screen_name) {  $user->screen_name = $twitter_user_info->screen_name;  $user->save(); }

試したこと

dd($twitter_user_info->screen_name);
とやると、ちゃんとアカウント名が表示されます。
しかし、
var_dump($twitter_user_info->screen_name);
は、Undefined property: stdClass::$screen_name とエラーになります。

※11/3 追記
dd($user->screen_name)は問題なく表示され、var_dump($user->screen_name)は同じくエラーとなります。(Undefined property)

なぜddでは値が確認できるのに、その後の処理でUndefinedになるのでしょうか?
どなたか御教示いただけますとありがたいです。

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

Laravel 5.8

s_tatsuki👍を押しています

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

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

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

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

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

m.ts10806

2019/11/03 02:05

$user->screen_name ↑こちらは問題ないのでしょうか。
makiri2002

2019/11/03 10:52

m.ts10806さん ありがとうございます。 dd($user->screen_name)は問題なく表示され、var_dump($user->screen_name)は同じくエラーとなります。(Undefined property) ※質問に追記させていただきます。
m.ts10806

2019/11/03 20:22

dd()もvar_dump()もプロパティそのものではなくそれをもっているインスタンス自体を出力していただけますか?
makiri2002

2019/11/05 12:56

m.ts10806さん 以下のようにifで囲んだところ、うまくいきました。 お忙しいところ、ありがとうございました>< if($user->screen_name){ //処理内容 } dd($twitter_user_info) {#258 ▼ +"id": XXXXX +"id_str": "XXXXX" +"name": "XXXX" +"screen_name": "XXXXX" +"location": "日本" +"profile_location": null +"description": "XXXXXX" +"url": null +"entities": {#256 ▶} +"protected": false +"followers_count": 80 +"friends_count": 396 +"listed_count": 0 +"created_at": "Wed Jul 10 02:33:06 +0000 2019" +"favourites_count": 0 +"utc_offset": null +"time_zone": null +"geo_enabled": false +"verified": false +"statuses_count": 1 +"lang": null +"status": {#255 ▶} +"contributors_enabled": false +"is_translator": false +"is_translation_enabled": false +"profile_background_color": "F5F8FA" +"profile_background_image_url": null +"profile_background_image_url_https": null +"profile_background_tile": false +"profile_image_url": "XXXX" +"profile_image_url_https": "XXXX" +"profile_banner_url": "XXXX" +"profile_link_color": "1DA1F2" +"profile_sidebar_border_color": "C0DEED" +"profile_sidebar_fill_color": "DDEEF6" +"profile_text_color": "333333" +"profile_use_background_image": true +"has_extended_profile": false +"default_profile": true +"default_profile_image": false +"following": false +"follow_request_sent": false +"notifications": false +"translator_type": "none" } //dd($user) Applicant {#272 ▼ #table: "tablename" #connection: "mysql" #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #withCount: [] #perPage: 15 +exists: true +wasRecentlyCreated: false #attributes: array:21 [▶] #original: array:21 [▶] #changes: [] #casts: [] #dates: [] #dateFormat: null #appends: [] #dispatchesEvents: [] #observables: [] #relations: [] #touches: [] +timestamps: true #hidden: [] #visible: [] #fillable: [] #guarded: array:1 [▶] }
guest

回答1

0

自己解決

以下のようにifで囲んだところ、うまくいきました。

if($user->screen_name){
//処理内容
}

投稿2019/11/05 12:57

makiri2002

総合スコア13

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

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

m.ts10806

2019/11/05 20:13

問題と解決方法がつながりません。 あくまで暫定の回避策であって、「理由の追求」になってないのでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問