我想在评论中显示我的粉丝的facebook个人资料图片

时间:2011-10-12 10:34:48

标签: php facebook curl

为此目的,我使用了两种方法,但两种方法都没有。 对于方法1,我下载了三个文件:

  1. base_facebook.php
  2. facebook.php
  3. fb_ca_chain_bundle.crt
  4. 方法1

       include ('facebook.php');
       $facebook = new facebook('API','SECRET');
       $fbid = $facebook->getUser(); 
    
       echo $fbid; // when i echo this it always show 0; even the followers are logedin or logedout
       echo "<div class='' id=\"user-icon\"><img src=\"'https://graph.facebook.com/{'.$fbid.'}/picture{?type=small}'\"  /></div>";
    

    方法2

    class sfFacebookPhoto{
       private $useragent = 'Loximi sfFacebookPhoto PHP5 (curl)';
       private $curl = null;
       private $response_meta_info = array();
       private $header = array(
          "Accept-Encoding: gzip,deflate",
          "Accept-Charset: utf-8;q=0.7,*;q=0.7",
          "Connection: close"
     );
     public function __construct() {
        $this->curl = curl_init();
        register_shutdown_function(array($this, 'shutdown'));
     }
    /**
     * Get the real url for picture to use after
     */
    public function getRealUrl($photoLink) {
        curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->header);
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, false);
        curl_setopt($this->curl, CURLOPT_HEADER, false);
        curl_setopt($this->curl, CURLOPT_USERAGENT, $this->useragent);
        curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($this->curl, CURLOPT_TIMEOUT, 15);
        curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($this->curl, CURLOPT_URL, $photoLink);
        //        curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, true);
        //this assumes your code is into a class method, and uses $this->readHeader as the callback //function
        curl_setopt($this->curl, CURLOPT_HEADERFUNCTION, array(&$this, 'readHeader'));
        $response = curl_exec($this->curl);
        if (!curl_errno($this->curl)) {
            $info = curl_getinfo($this->curl);
            var_dump($info);
            if ($info["http_code"] == 302) {
                $headers = $this->getHeaders();
                if (isset($headers['fileUrl'])) {
                    return $headers['fileUrl'];
                }
             }
         }
         return false;
     }
    /**
     * Download facebook user photo
     * 
     */
      public function download($fileName) {
          curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->header);
          curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($this->curl, CURLOPT_HEADER, false);
          curl_setopt($this->curl, CURLOPT_USERAGENT, $this->useragent);
          curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 10);
          curl_setopt($this->curl, CURLOPT_TIMEOUT, 15);
          curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
          curl_setopt($this->curl, CURLOPT_URL, $fileName);
          curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, true);
          $response = curl_exec($this->curl);
          $return = false;
          if (!curl_errno($this->curl)) {
                $parts = explode('.', $fileName);
                $ext = array_pop($parts);
                $return = sfConfig::get('sf_upload_dir') . '/tmp/' . uniqid('fbphoto') . '.' . $ext;
                file_put_contents($return, $response);
           }
           return $return;
         }
        /**
        * CURL callback function for reading and processing headers
        * Override this for your needs
        *
        * @param object $ch
        * @param string $header
        * @return integer
        */
        private function readHeader($ch, $header) {
         //extracting example data: filename from header field Content-Disposition
          $filename = $this->extractCustomHeader('Location: ', '\n', $header);
          if ($filename) {
              $this->response_meta_info['fileUrl'] = trim($filename);
          }
          return strlen($header);        
        }
        private function extractCustomHeader($start, $end, $header) {
           $pattern = '/' . $start . '(.*?)' . $end . '/';
           if (preg_match($pattern, $header, $result)) {
               return $result[1];
           } else {
              return false;
           }
       }
       public function getHeaders() {
           return $this->response_meta_info;
       }
       /**
       * Cleanup resources
       */
       public function shutdown() {
           if ($this->curl) {
              curl_close($this->curl);
           }
       }
    }
    

    我将上面的课程保存为curl.php。

       require_once 'curl.php';
       $photo="https://graph.facebook.com/me/picture?access_token=".$session['access_token'];
       $sample = new sfFacebookPhoto;
       $thephotoURL=$sample->getRealUrl($photo);
       echo $thephotoURL;                        
       // but here echo is not showing anything no-error, no-exception, no-output.
       echo "<div id=\"user-icon\"><img src=\"$thephotoURL\"  /></div>";
    

    如您所见,我想在评论中显示Facebook用户的图像。   在Facebook用户评论的Wordpress或Joomla中,他们的Facebook个人资料图片显示评论。我的网站没有使用Wordpress或Joomla。   它是基于PHP的,我自己创建它。   我使用了Avatars代码,如果有任何Wordpress用户在我的网站上发表评论,它的工作正常。他/她的图像显示但不是Facebook用户。

    我正在使用此代码用于Wordpress Avatars工作正常:

    $hash = md5( strtolower( trim( $row['email'] ) ) );
    $default_usr = urlencode( 'http://www.kingofdevelopers.com/images/user-icon.png'); 
    echo "<div class='default-user' id=\"user-icon\"><img src=\"http://www.gravatar.com/avatar /$hash.'.jpg?s=45&d=$default_usr'\"  /></div>";
    

1 个答案:

答案 0 :(得分:1)