Facebook PHP SDK Feed图片调整大小?

时间:2014-09-20 17:28:15

标签: php facebook facebook-php-sdk

您好我正在为网站完成Facebook Feed,并注意到SDK会返回质量非常低的图片。

过去我做过像str替换s.jpg到n.jpg或o.jpg的事情。我知道这些修复。他们在这种情况下无法工作。

此外,在过去,我还抓住了s130x130细分并将其更改为调整大小。同样,这在我的案例中并不起作用。

我在Facebook Feed中返回的网址有我以前从未见过的格式。

https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xpa1/v/t1.0-9/s130x130/10426213_842375602447918_6490185390368658086_n.jpg?oh=a2db80558f6e5075b1b5c0cfbe9f6d09&oe=5487ACF5&__gda__=1418998035_89dfe352a7b600215d335f6317ed621d

他们拥有所有常见的元素,但是,他们也有?哦& oe& gda 。这显然是GET数据的形式。这些元素似乎必须存在,而实例中则是正确的元素。似乎这些东西阻止了重新调整尺寸。让我解释一下:

我知道一张图片有多种尺寸,因为我可以通过

访问一张图片
http://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xpa1/v/t1.0-9/s720x720/10426213_842375602447918_6490185390368658086_n.jpg?oh=a23ee08c91265d6396c3f19e9dee5a22&oe=5493DB4F&__gda__=1422978473_f94a2eba685581687bc048a255c26ca4

我的第一个想法是尝试抓住图像

http://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xpa1/v/t1.0-9/s720x720/10426213_842375602447918_6490185390368658086_n.jpg

http://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xpa1/v/t1.0-9/s130x130/10426213_842375602447918_6490185390368658086_n.jpg

然而,这会返回错误 "处理您的请求时出错。 参考#50.e4bf6d8.1411232880.1d669acb"

如果我尝试编辑以前的链接(标记为代码)并更改大小,我也会得到相同的响应。

最终,如何重新调整尺寸或从Facebook Feed中获取更大的图像尺寸?或者我如何修改我在250或500像素球场所得到的东西?似乎哦, gdp ,并且oe以某种方式进行身份验证,我真的不知道如何生成正确的答案。在任何地方,我看起来似乎人们只是试图重新调整个人资料图片的大小,但从来没有内容。

以下是我的完整代码

<?php
// include the facebook sdk
require_once('resources/facebook-php-sdk-master/src/facebook.php');

// connect to app
$config = array();
$config['appId'] = 'APP_ID';
$config['secret'] = 'APP_SECRET';
$config['fileUpload'] = false; // optional

// instantiate
$facebook = new Facebook($config);

// set page id
$pageid = "PAGE_ID";

// now we can access various parts of the graph, starting with the feed
$pagefeed = $facebook->api("/" . $pageid . "/feed");
    //get page picture
    $page_picture = 'http://graph.facebook.com/' . $pageid . "/picture?app_id=" . $config['appId'];
   if(isset($fb_post_limit)){
        $numb_of_posts = $fb_post_limit;
    }else{
        $numb_of_posts = 7;
    }
    // now we can access various parts of the graph, starting with the feed
    $pagefeed = $facebook->api("/" . $pageid . "/feed");

    function check_picture($post){
        // if there is a picture post it
        if(!empty($post['picture'])){
            echo '<div class="row">';
               echo '<img src="' . $post['picture'] . '"  class="facebook-img col-xs-12"/>';
            echo '</div>';
        }
    }

?>



 <?php

echo "<div class=\"fb-feed\">";

        // set counter to 0, because we only want to display $numb posts
        $i = 0;
        foreach($pagefeed['data'] as $post) {

              if($post['from']['name'] == 'PAGE NAME'){
                if ($post['type'] == 'status' || $post['type'] == 'link' || $post['type'] == 'photo') {
                    // open up an fb-update div
                    echo "<div class=\"fb-update col-xs-12\">";


                    $ids = explode('_', $post['id']);

                        // check if post type is a status
                        if ($post['type'] == 'status') {
                            if(!$post['story'] == 'PAGE NAME commented on a post.' ){

                                check_picture($post);
                                if (empty($post['story']) === false) {
                                   echo '<img src="' . $page_picture . '" class="fb-profile" >' ;
                                    echo "<p class=\"fb-message\" >" . $post['story'] . "</p>";


                                } elseif (empty($post['message']) === false) {
                                    echo '<img src="' . $page_picture . '" class="fb-profile" >';
                                    echo "<p class=\"fb-message\">" . $post['message'] . "</p>";

                                }
                                 // post the time

                                 echo "<h5 class=\"fb-date\">Status updated: " . date("jS M, Y", (strtotime($post['created_time']))) . "</h5>";
                                 echo '<a class="facebook link btn btn-default btn-lrg" href="http://www.facebook.com/' . $pageid . '/posts/' . $ids[1] . '" >View Post</a>';
                            } else {
                                $i--;
                            }

                        }
                        // check if post type is a link
                        if ($post['type'] == 'link') {
                            echo '<img src="' . $page_picture . '" class="fb-profile" >';
                            if(!empty($post['message'])){  echo "<p class=\"fb-message\">" . str_replace($post['link'], '', $post['message']) . "</p>";}
                            echo "<h5 class=\"fb-date\">Link posted on: " . date("jS M, Y", (strtotime($post['created_time']))) . "</h5>";
                            check_picture($post);
                            echo '<p class="fb-link-desc"' . $post['name'] . '</p>';
                            if (empty($post['story']) === false) {

                                echo "<p class=\"fb-message\" >" . $post['story'] . "</p>";
                            }
                            echo "<p ><a href=\"" . $post['link'] . "\" target=\"_blank\">" . $post['link'] . "</a></p>";
                            echo '<a class="fb-link btn btn-default btn-lrg" href="http://www.facebook.com/' . $pageid . '/posts/' . $ids[1] . '" >View Post</a>';
                        }

                        // check if post type is a photo
                        if ($post['type'] == 'photo') {echo '<img src="' . $page_picture . '" class="fb-profile" >';
                            check_picture($post);
                            echo "<h5 class=\"fb-date\">Photo posted on: " . date("jS M, Y", (strtotime($post['created_time']))) . "</h5>";
                            if (empty($post['story']) === false) {
                                echo "<p>" . $post['story'] . "</p>";

                            } elseif (empty($post['message']) === false) {
                                echo "<p>" . $post['message'] . "</p>";
                            }

                            echo '<a class="facebook link btn btn-default btn-lrg" href="http://www.facebook.com/' . $pageid . '/posts/' . $ids[1] . '" >View Post</a>';
                        }



                    echo "</div>"; // close fb-update div

                    $i++; // add 1 to the counter if our condition for $post['type'] is met
                }

                //  break out of the loop if counter has reached $numb
                if ($i == $numb_of_posts) {
                    break;
                }
             }   // end the foreach statement
        }

        echo "</div>";

    ?>

2 个答案:

答案 0 :(得分:2)

经过一段时间的实验,我找到了一个有效的解决方案。这是它的简化版本

require_once(facebook/facebook.php");
$config = array();
$config['appId'] = 'XXXXXXXXXXX';
$config['secret'] = 'XXXXXXXXXXXXXXXXXXXXXXXXX';
$config['fileUpload'] = false; // optional

global $facebook;
$facebook = new Facebook($config);

// get feed
function get_fbfeed(){
    global $facebook;
    $pageid = 'XXXXXXX';
    $numberOfPosts = $num;
    $posts = $facebook->api("/" . $pageid . "/feed?limit=" . $numberOfPosts);
    return $posts;
}

function get_fb_image($image){
    global $facebook;
    $post = $facebook->api("/" . $image);
    return $post;
}

然后在我的循环中使用

  <?php $picture = get_fb_image($fb['object_id']); ?>
  <img src="<?php echo $picture['source']; ?>" alt="" />

然后每次都会获得默认或更高的res变化。

此方法的唯一问题是,如果用户发布图库,则会崩溃。我正在寻找另一个线程的修复。

答案 1 :(得分:1)

我维护长期离开的开发人员的代码,并且我遇到了同样的问题。 (我正在使用基于此的代码:http://www.ipragmatech.com/create-facebook-yiiframework-graphapi.html

我还没有找到100%可靠的解决方案,但一些的FB Feed图片可能具有很高的分辨率。使用您发布的网址,删除以下网址部分:/v/t1.0-9/s130x130

这应该会为您提供一个显示大图的网址:

如果您想使用小尺寸和大尺寸而没有大量的URL操作,请执行上述操作,然后更改&#34; _n&#34;在&#34; _s&#34;的URL中或&#34; _b&#34;:

您应该能够使用str_replace动态执行此操作,并使用API​​中的网址:

str_replace("/v/t1.0-9/s130x130","", $post['picture'])

但是,这仅适用于遵循此特定网址结构的照片。我看过其他使用完全不同路径的Feed照片,所以那些仍然显示小尺寸,直到我们可以解决它们。

希望这有帮助!

我一直在阅读的一些链接: