2011-12-08 5 views
48

Come suggerisce il titolo, sto cercando di generare meta tag di Facebook Open Graph in modo dinamico, ma non riesco a farlo funzionare. È possibile?
Generazione di meta tag di Facebook Open Dynamic in modo dinamico

UPDATE:

Alla fine ho capito di lavoro con l'aiuto di @saccharine. Il seguente codice sta lavorando per me:

<?php 

$params = array(); 
if(count($_GET) > 0) { 
    $params = $_GET; 
} else { 
    $params = $_POST; 
} 
// defaults 
if($params['type'] == "") $params['type'] = "restaurant"; 
if($params['locale'] == "") $params['locale'] = "en_US"; 
if($params['title'] == "") $params['title'] = "default title"; 
if($params['image'] == "") $params['image'] = "thumb"; 
if($params['description'] == "") $params['description'] = "default description"; 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
    <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# MY_APP_NAME_SPACE: http://ogp.me/ns/fb/MY_APP_NAME_SPACE#"> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 

     <!-- Open Graph meta tags --> 
     <meta property="fb:app_id" content="MY_APP_ID" /> 
     <meta property="og:site_name" content="meta site name"/> 
     <meta property="og:url" content="http://mysite.com/index.php?type=<?php echo $params['type']; ?>&locale=<?php echo $params['locale']; ?>&title=<?php echo $params['title']; ?>&image=<?php echo $params['image']; ?>&description=<?php echo $params['description']; ?>"/> 
     <meta property="og:type" content="MY_APP_NAME_SPACE:<?php echo $params['type']; ?>"/> 
     <meta property="og:locale" content="<?php echo $params['locale']; ?>"/> 
     <meta property="og:title" content="<?php echo $params['title']; ?>"/> 
     <meta property="og:image" content="http://mysite.com/img/<?php echo $params['image']; ?>.png"/> 
     <meta property="og:description" content="<?php echo $params['description']; ?>"/> 

    </head> 
</html> 

L'url sto mettendo nel debugger Facebook ora possono includere uno qualsiasi dei parametri dinamici o addirittura nessuno, tutti o solo una selezione e in qualsiasi ordine in questo modo:
http://mysite.com/index.php?type=restaurant&title=luigis
o questo:
http://mysite.com/index.php?locale=de_DE&description=hi&type=bistro

Avere che compiuta: ora posso pubblicare le azioni per flusso dell'utente:

function postRestaurant() { 
    FB.api('me/MY_APP_NAMESPACE:have_lunch?\ 
    start_time=2000-12-12T04:00:00&\ 
    expires_in=7200&\ 
    restaurant=' + encodeURIComponent(getRedirectURI() + '?type=restaurant' + '&description=arnold' + '&title=stalone'), 'post', function (response) { 
     if (!response || response.error) { 
      console.log('postRestaurant: Error occured => ' + response.error.message); 
     } else { 
      console.log('postRestaurant: Post was successful! Action ID: ' + response.id); 
     } 
    }); 
} 

Funziona come un fascino! :]

+2

Come voi, sono in grado di generare i meta tag dinamici chiamando l'URL al mio oggetto con parametri GET/POST dal debugger, ma hai capito come implementare qualcosa di simile con la tua app? Finora, quando uso l'SDK di Javascript per provare e pubblicare un'azione, e includo i parametri nell'URL del mio oggetto (come farei nel debugger), Facebook sembra spogliare quei parametri in modo che la mia pagina oggetto (index.php per te) non li riceve mai. Qualche idea? – bradleygriffith

+2

@bradleygriffith Sì, sono riuscito a pubblicare azioni nello stream dell'utente. Ho aggiornato la mia domanda ancora una volta con un esempio su come farlo con l'SDK JavaScript. – borisdiakur

+0

Ho incontrato lo stesso problema. Come lo hai risolto esattamente? Come si spiega facebook per leggere l'intero URL con tutti i parametri? – fabian

risposta

30

Innanzitutto, desidero ribadire che sono quasi certo che il tuo problema è dovuto al fatto che l'URL che stai passando il debugger non viene generato dinamicamente. Il tag url funge essenzialmente da redirector. A meno che non sia esattamente lo stesso (nel senso che i meta tag sull'url meta oggetto è lo stesso di quelli sull'URL che stai passando) come l'url che stai testando, non otterrai i risultati che stai cercando.

Il meta tag

<meta property="og:url"> 

bisogno di essere generati dinamicamente. Il debugger viene reindirizzato alla pagina indice predefinita anziché alla pagina generata dinamicamente.

Per esempio, ho assegnare un ID ad ogni oggetto che sto utilizzando, e quindi ho qualcosa come il seguente

<meta property="og:url" content="http://mysite.com/index.php?id=<?php echo $_GET['id'] ?>"/> 

passo in quel URL esatto nel debugger, e quindi la pagina finale del il debugger atterra sarà quell'URL esatto.

Inoltre, nel seguito

<meta property="og:type" content=""/> 

come è la proprietà viene generata dinamicamente? Ti sei ricordato di inserire nel tuo codice reale qualcosa del tipo seguente?

<meta property="og:type" content="<?php echo _GET['type] ?>"/> 

È sembrano anche essere spingendo tutto in l'url, che è pericoloso e può causare enormi mal di testa, che potrebbe essere il problema qui. Invece, spingere solo una cosa, ad esempio? Type = bistro e quindi propagare i dati necessari dal DB.

mi sento di raccomandare in modo dinamico generando maggior parte dei tag OG sulla base di un'object_id. Memorizza le informazioni OG pertinenti per ogni object_id e quindi le diffonde quando vi si accede. In questo modo, puoi anche espandere e modificare facilmente i tag che usi quando OG viene aggiornato.

Se avete problemi con OG non si deve esitare a pubblicarli come nuove domande invece di commenti come ho garantire altre persone hanno anche lo stesso problema.

+0

@Lego In questo momento sto generando dinamicamente i miei meta tag con qualcosa a cui sto lavorando attualmente, e funziona bene. Posso vedere come stai passando nella proprietà dell'URL? Ad esempio, nell'esempio di codice, in realtà non hai incluso esplicitamente i parametri passati. Ho rivisto la mia risposta per espandere ulteriormente questo. – saccharine

+0

@Lego Il debugger continuerà a ignorare tutti i parametri fino a quando l'oggetto url non è dinamico e punta alla pagina indice senza parametri come il modo in cui lo hai impostato in questo momento. Puoi pubblicare i meta tag quando visualizzi la fonte dell'URL che stai passando nel debugger? – saccharine

+0

Grazie mille! Ti farei una decina di volte se potessi! Credevo quasi che non fosse nemmeno posible ma mi hai fatto provare e riprovare. Avevi ragione con l'url dinamico e finalmente funziona! Ho aggiornato la mia [domanda] (http://stackoverflow.com/q/8431694/601466) qui sopra. – borisdiakur

1

Quando fai clic sul collegamento Ottieni codice nei tipi di oggetto, hai provato a incollare il codice che ti ha fornito?
Vorrei provare ad incollare sul Web e, se funziona, replicare l'output html.
Provalo senza il tag DOCTYPE.
Ecco un esempio di ciò che ho ottenuto, e non vedo questi tag sopra: fb: app_id, non sono sicuro se faccia la differenza.
Inoltre, non dovrebbe anche il og: url includere le variabili alla fine?

< prefisso testa = "og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# sito: http://ogp.me/ns/website#" >
< meta property = "fb: APP_ID" content = = "1.234.567,888 mila" >
< meta proprietà "og: url" content = "http://mysite.com/index.php?type=MY_APP_NAMESPACE%3Abistro" >

1

Sì, funziona come un incantesimo, ma ha bisogno di una ricodifica per me. Ho dovuto creare una nuova pagina come questa:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
    <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# MY_APP_NAME_SPACE: http://ogp.me/ns/fb/MY_APP_NAME_SPACE#"> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 

     <!-- Open Graph meta tags --> 
     <meta property="og:title" content="<?= urldecode($_GET['title']) ?>" /> 
     <meta property="og:type" content="article" /> 
     <meta property="og:url" content="<?= "http://www.calsots.com".$_SERVER['REQUEST_URI']; ?>" /> 
     <meta property="og:image" content="<?= $_GET['image'] ?>" /> 
     <meta property="og:site_name" content="Calsots.com" /> 
     <meta property="fb:admins" content="MY_APP_ID" /> 
     <meta property="og:description" content="<?= urldecode($_GET['description']) ?>" /> 

    </head> 
</html> 
0

per Joomla Opengraph Meta dinamica:

<meta property="og:title" content="<?= 
$title = $this->getTitle(); 
?>" /> 
     <meta property="og:type" content="website" /> 
     <meta property="og:url" content="<?= "http://YORUWEBSITE.com".$_SERVER['REQUEST_URI']; ?>" /> 
     <meta property="og:image" content="http://YOURWEBSITE.com/images/stories/BIGIMAGE.jpg" /> 
     <meta property="og:site_name" content="YOURWEBSITE.com" /> 
     <meta property="fb:app_id" content="YOURFACEBOOKAPPIDNUMBER" /> 
     <meta property="og:description" content="<?= $title = $this->getDescription(); ?>" /> 
+1

Test su https://developers.facebook.com/tools/debug – MilosK

+0

È possibile applicare questo stesso approccio a SMARTY pure. – blackhawk