无法使用Yii PHP框架从Instagram JSON响应中检索子对象

时间:2013-03-10 18:02:06

标签: php json yii instagram

我正在尝试使用Yii框架和Yii扩展yiinstagram创建一个Instagram应用程序。我可以成功连接到Instagram,但我无法检索所有当前用户的个人资料数据。这是我在控制器中连接到Instagram并检索用户数据的代码。

public function actionIndex()
{                                                
    $instagram = Yii::app()->instagram->getInstagramApp();
    if (isset($_GET['code']))
    {
        $accessToken=$instagram->getAccessToken();
        Yii::app()->session['InstagramAccessToken']= $accessToken;
        $instagram->setAccessToken(Yii::app()->session['InstagramAccessToken']);
        $instagramUser=$instagram->getCurrentUser();
        Yii::app()->session['InstagramUser'] = $instagramUser;
        $userFeed = $instagram->getUserFeed();
        $this->render('index', array('userFeed'=>$userFeed));
    } 
    else
    {
    echo "Could not retrieve code variable";
    }
}

我获取包含当前用户的instagram个人资料数据的会话变量,并将其放在与另一个控制器关联的此php页面中:

<?php
/* @var $this LoginController */
$this->pageTitle=Yii::app()->name . ' - Instagram Profile'; 
?>
<h1>Instagram Profile</h1>
<div class="row">
    <div class="span3"><img src="<?php echo Yii::app()->session['InstagramUser']->profile_picture;?>"/></div>
<div class="span7">
    <ul>
        <li><b>username:</b><?php echo Yii::app()->session['InstagramUser']->username;?></li>
        <li><b>full name:</b><?php echo Yii::app()->session['InstagramUser']->full_name;?></li>
        <li><b>bio:</b><?php echo Yii::app()->session['InstagramUser']->bio;?></li>
        <li><b>website:</b><?php echo Yii::app()->session['InstagramUser']->website;?></li>
        <li><b>photos:</b><?php echo Yii::app()->session['InstagramUser']->counts->media;?></li>
        <li><b>followers:</b><?php echo Yii::app()->session['InstagramUser']->counts->followed_by;?></li>
        <li><b>follows:</b><?php echo Yii::app()->session['InstagramUser']->counts->follows;?></li>
    </ul>
    <?php echo var_dump(Yii::app()->session['InstagramUser']); ?>        
</div>    

即使显示会话变量中的其余数据,也不会显示子对象“counts”(media,followed_by,follow)中的值。我做了一个yii :: app() - &gt; session ['InstagramUser']的var_dump,这就是我得到的:

object(stdClass)#22 (6) { 
["username"]=> string(9) "mdailey77" 
["bio"]=> string(36) "photographer and avid Photoshop user"
["website"]=> string(25) "http://www.mattdailey.net"
["profile_picture"]=> string(72) "http://images.instagram.com/profiles/profile_3586295_75sq_1345911013.jpg"
["full_name"]=> string(14) "Matthew Dailey"
["id"]=> string(7) "3586295" }

“count”子对象应该在“id”之前出现。如何从“计数”子对象中获取值以显示?过去三天我一直在为此烦恼,所以任何帮助都会非常感激。感谢。

不确定这是否有帮助,但使用相同的端点网址这是我使用Instagram自己的API控制台获得的响应:

{
"meta": {
"code": 200
},
"data": {
    "username": "mdailey77",
    "bio": "photographer and avid Photoshop user",
    "website": "http://www.mattdailey.net",
    "profile_picture": "http://images.instagram.com/profiles/profile_3586295_75sq_1345911013.jpg",
    "full_name": "Matthew Dailey",
    "counts": {
          "media": 167,
          "followed_by": 24,
          "follows": 30
    },
    "id": "3586295"
}

}

1 个答案:

答案 0 :(得分:0)

查看source of the underlying Instagram.php,看起来getCurrentUser()的返回值是从身份验证中获得的。查看Instragram docs,auth请求的返回数据不包括计数。

你在问题​​的最后得到的JSON好像你去了/users/user-id/

看起来相同的是使用getUser($id)而不是getCurrentUser()。您显然需要提供相应的用户ID(这应该是getCurrentUser()的返回。

我想你想要这样的东西:

public function actionIndex()
{                                                
    $instagram = Yii::app()->instagram->getInstagramApp();
    if (isset($_GET['code']))
    {
        $accessToken=$instagram->getAccessToken();
        Yii::app()->session['InstagramAccessToken']= $accessToken;
        $instagram->setAccessToken(Yii::app()->session['InstagramAccessToken']);
        $loggedInUser=$instagram->getCurrentUser();
        $instagramUser=$instagram->getUser($loggedInUser->id);
        Yii::app()->session['InstagramUser'] = $instagramUser;
        $userFeed = $instagram->getUserFeed();
        $this->render('index', array('userFeed'=>$userFeed));
    } 
    else
    {
    echo "Could not retrieve code variable";
    }
}