получить содержимое страницы и проблему с загрузкой json_decode - PullRequest
0 голосов
/ 01 июня 2011

У меня есть следующий код, который вызывает открытый график Facebook и возвращает объект с акциями и идентификатором. Единственная проблема заключается в том, что я звоню 30 раз, и загрузка занимает более 9 секунд. Есть ли более простой способ перейти прямо к делу и просто получить акции, чтобы они загружались быстрее?

//facebook
$fdata = file_get_contents('http://graph.facebook.com/http://theoatmeal.com/comics/127_hours');
$fdata = json_decode($fdata);
if($fdata->shares) {
    $share_count['facebook'] = $fdata->shares;
}

Ответы [ 3 ]

1 голос
/ 14 ноября 2012

Это то, что я использую для декодирования с graph.facebook.com

 <?php
 $info = "http://theoatmeal.com/comics/127_hours";
 $url = "http://graph.facebook.com/". $info . "";
$geturl = file_get_contents($url);
$info = json_decode($geturl);
{
$id = $info->id;
$shares = mysql_real_escape_string($info->shares);
?>
<?php echo $id;?><br>
<?php echo $shares; 
}
?>
0 голосов
/ 01 июня 2011

Я не очень хорошо понял ваш вопрос в первый раз, поэтому я пытаюсь сделать еще один выстрел.

Вы можете использовать FQL для выполнения запроса:

$fql = 'SELECT total_count FROM link_stat WHERE url="http://google.com"';
$json = file_get_contents('https://api.facebook.com/method/fql.query?format=json&query=' . urlencode($fql));
$data = json_decode($json);
echo $data[0]->total_count;

Здесь, total_countдает количество акций для ссылки.

Если у вас есть несколько URL-адресов для запроса, вы можете сделать все это только в одном запросе, используя OR:

SELECT url, total_count FROM link_stat WHERE url="..." OR url="..."

ЗдесьНапример, вы хотите получить количество акций для этих четырех URL-адресов:

$urls = array(
    "http://google.com",
    "http://twitter.com",
    "http://stackoverflow.com",
    "http://linkedin.com"
);

function wrap($url) {
    return 'url="' . $url . '"';
}

$fql = 'SELECT url, total_count FROM link_stat WHERE ';
$fql .= implode(" OR ", array_map("wrap", $urls));

$json = file_get_contents('https://api.facebook.com/method/fql.query?format=json&query=' . urlencode($fql));
$data = json_decode($json);

И $data - это массив из 4 объектов с номером общего ресурса для каждого URL-адреса:

array(4) {
  [0]=> object(stdClass)#2 (2) {
    ["url"]=> string(17) "http://google.com"
    ["total_count"]=> int(1318598)
  }
  [1] => ...
  [2] => ...
  [3] => ...
}

Надеюсь, это поможет!

0 голосов
/ 01 июня 2011

Хороший простой способ - использовать PHP PHP SDK ( см. На github ). Сначала вы должны убедиться, что пользователь вошел в систему:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if ($user) {
    try {
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        $user = null;
    }
}

Если он вошел в систему, вы можете совершать вызовы API:

$result = $facebook->api(...);

Если нет, вы должны войти в него:

<?php if ($user): ?>
    <a href="<?php echo $facebook->getLogoutUrl() ?>">Logout of Facebook</a>
<?php else: ?>
    <a href="<?php echo $facebook->getLogoutUrl() ?>">Login with Facebook</a>
<?php endif ?>

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...