使用Curl获取gmail联系人照片

时间:2014-04-15 21:00:50

标签: php curl photo google-contacts

我创建了一个类来管理与Google Contacts API的连接,验证并返回联系人。

我已成功获得联系人列表,但我还没有设法获得联系人照片。这是我的HTML代码:

<img src="<?= $service->getPhoto($contact['image']) ?>" />

这是我的php:

public function getPhoto($url = false){

        if(!$url)
            return false;

        $url = urlencode($url.'&access_token='.$this->_access_token);
        //echo $url.'&access_token='.$this->_access_token;
        $curl = curl_init($url);

       curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_TIMEOUT, 15);

        $image = curl_exec($curl);
        curl_close($curl);

        return $image;

    }

请注意,$ url参数是Google API返回的联系人数据提供的网址,如下所示:

https://www.google.com/m8/feeds/photos/media/{userEmail}/{contactID}

这是一个URL的例子(根据我的项目):

https://www.google.com/m8/feeds/photos/media/example%40gmail.com/ABCDEFGHIJK2345

有时contactId包含'/'

来自Google的错误消息是:

401. That's an error.

There was an error in your request. That's all we know.

我错过了什么吗?

注意:我尝试使用urlencode,urldecode并尝试不使用它们......但我遇到了同样的问题。此外,我正在测试的联系人有gmail照片。

2 个答案:

答案 0 :(得分:1)

您正在对整个网址进行编码,可能是导致混乱的原因!?

$url = $url . '&access_token=' . urlencode($this->_access_token);

答案 1 :(得分:0)

我终于解决了这个问题,这就是我所做的:

我改变了'&amp;'至 '?'在$ url

$url.'&access_token='.$this->_access_token

更改为:

$url.'?access_token='.$this->_access_token

由于access_token是第一个参数......我删除了curl,我只是按原样返回$ url并将其放在图像src中。

虽然它已经以某种方式解决了,但我不知道将access_token放在图像的src中是否可行(任何客户端用户都可以查看)。