2011-05-31 4 views
-1

J'ai le code suivant qui appelle le graphe ouvert de facebook et retourne un objet avec des partages et un identifiant. Le seul problème est que je fais cet appel 30 fois et qu'il faut plus de 9 secondes pour charger. Y a-t-il un moyen plus simple d'aller droit au but et d'obtenir simplement les actions afin que cela se charge plus vite?récupérer le contenu de la page et json_decode chargement problème

//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; 
} 

Répondre

0

Une bonne façon simple de procéder est d'utiliser le Facebook SDK PHP (see on github). D'abord, vous devez vous assurer que l'utilisateur est connecté:

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; 
    } 
} 

S'il est connecté, vous êtes en mesure de faire des appels API:

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

S'il n'est pas, vous devez le connecter dans:

<?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 ?> 

Hope that helps!

+0

Je vous remercie, mais je pense que cela est un peu plus alors je veux faire pour celui-ci. Je veux garder les choses simples et ne pas avoir à charger de code supplémentaire qui pourrait causer plus de temps de chargement. –

+0

Qu'essayez-vous de faire? Vous ne donnez pas assez d'informations à ce sujet. Quel appel d'API voulez-vous faire? – Quentin

+0

voir la modification. J'essaye d'obtenir le compte de facebook. aller à l'URL dans la fonction file_get_contents –

0

Je n'ai pas bien compris votre question la première fois alors j'essaie de donner un autre coup de feu.

Vous pouvez utiliser FQL pour faire de votre requête:

$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; 

Ici, total_count vous donne le nombre d'actions pour le lien.

Si vous avez plusieurs URL pour vous interroger, vous pouvez faire tout cela dans une seule requête à l'aide OR:

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

Voici un exemple que vous voulez obtenir le nombre d'actions pour thoses 4 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); 

Et $data est un tableau de 4 objets avec le nombre d'actions pour chaque URL:

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

Espérons que ça aide!

1

C'est ce que j'utilise pour décoder de 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; 
} 
?> 
Questions connexes