您好我正在为网站完成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
我的第一个想法是尝试抓住图像
或
然而,这会返回错误 "处理您的请求时出错。 参考#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>";
?>
答案 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照片,所以那些仍然显示小尺寸,直到我们可以解决它们。
希望这有帮助!
我一直在阅读的一些链接: