Привет! Я заканчиваю фейсбук-фид для сайта и заметил, что SDK возвращает изображения очень низкого качества.
В прошлом я делал такие вещи, как str, заменив s.jpg на n.jpg или o.jpg. Я знаю об этих исправлениях. Они не работают в этом случае.
Кроме того, в прошлом я также захватил сегмент s130x130 и изменил его для изменения размера. Опять же, это не работает в моем случае.
URL-адрес, по которому меня возвращают в фейсбуке, имеет форматирование, которого я никогда раньше не видел.
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
У них есть все обычные элементы, однако, они также есть у них?&ае&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? или как я могу изменить то, что мне нужно, чтобы получить что-то в парке на 250 или 500 пикселей? Кажется, что ВВП, и я аутентифицируюсь в некотором роде, и я действительно понятия не имею, как генерировать правильные ответы. Куда бы я ни посмотрел, кажется, что люди только пытаются изменить размер изображения профиля, но не контент.
Вот мой полный код ниже
<?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>";
?>
После долгих экспериментов я нашел решение, которое работает. это гораздо более упрощенная версия
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="" />
Который будет каждый раз получать мне стандартное или более высокое разрешение.
Единственная проблема с этим подходом состоит в том, что, если пользователь публикует галерею, он вылетает. Я ищу исправление в другой теме.
Я поддерживаю код от давно ушедшего разработчика, и у меня та же проблема. (Я работаю с кодом на основе этого: http://www.ipragmatech.com/create-facebook-yiiframework-graphapi.html )
Я не нашел 100% надежного решения, но немного изображений в канале FB может иметь большое разрешение. Используя размещенный вами URL, удалите следующие части URL: /v/t1.0-9/s130x130
Это должно оставить вас с URL, который отображает большую картинку:
Если вы хотите использовать маленькие и большие размеры без большого количества манипуляций с URL-адресами, сделайте то же самое, но затем измените «_n» в URL-адресе на «_s» или «_b»:
Вы должны быть в состоянии использовать str_replace
сделать это на лету с помощью URL из API:
str_replace("/v/t1.0-9/s130x130","", $post['picture'])
Однако это будет работать только для фотографий, которые соответствуют этой определенной структуре URL. Я видел другие фотографии каналов, которые используют совершенно другой путь, поэтому они по-прежнему отображают небольшие размеры, пока мы не сможем их выяснить.
Надеюсь это поможет!
Некоторые ссылки, где я читал: