0

我正在尝试使用 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>    

来自子对象“计数”(media、followed_by、follows)的值不会显示,即使会话变量中的其余数据显示。我做了一个 Yii::app()->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" }

“counts”子对象应该出现在“id”之前。如何从“计数”子对象中获取要显示的值?在过去的三天里,我一直在为此苦恼,所以任何帮助将不胜感激。谢谢。

不确定这是否有帮助,但使用相同的端点 url 这是我使用 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"
}

}

4

1 回答 1

0

查看底层 Instagram.php 的来源,看起来 is 的返回getCurrentUser()是从身份验证中获得的。查看Instragram 文档,身份验证请求的返回数据不包括计数。

您在问题末尾得到的 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";
    }
}
于 2013-03-11T16:52:19.573 回答