2011-12-08 17 views
48

Jak sugeruje tytuł, próbuję dynamicznie generować metatagi Facebooka Open Graph, ale nie mogę ich uruchomić. Czy to możliwe?
Dynamiczne generowanie tagów metadanych Open Graph Facebooka

UPDATE:

Wreszcie dostałem go pracy z pomocą @saccharine. Poniższy kod działa dla mnie:

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

Adres URL Kładę do debuggera Facebooka mogą teraz zawierać dowolny z parametrów dynamicznych lub nawet żaden, wszystkie lub tylko wybrane w dowolnej kolejności tak:
http://mysite.com/index.php?type=restaurant&title=luigis
lub to:
http://mysite.com/index.php?locale=de_DE&description=hi&type=bistro

Mając to znakomity: mogę teraz publikować działań do strumienia użytkownika:

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

Działa jak urok! :]

+2

Podobnie jak wy, jestem w stanie generować dynamiczne meta tagi, wywołując URL do mojego obiektu z parametrami GET/POST z debugera, ale zorientowali się jak zaimplementować coś podobnego w swojej aplikacji? Do tej pory, kiedy używam Javascript SDK, aby spróbować opublikować akcję, i uwzględnić parametry w adresie URL do mojego obiektu (tak jak w przypadku debuggera), Facebook wydaje się usuwać te parametry, dzięki czemu moja strona obiektu (index.php dla ciebie) nigdy ich nie otrzymasz. Jakieś pomysły? – bradleygriffith

+2

@bradleygriffith Tak, udało mi się opublikować działania w strumieniu użytkownika. Po raz kolejny zaktualizowałem moje pytanie, podając przykład, jak to zrobić za pomocą zestawu SDK JavaScript. – borisdiakur

+0

Wpadłem na ten sam problem. Jak dokładnie to rozwiązałeś? W jaki sposób wytłumaczysz Facebook, aby przeczytać pełny adres URL ze wszystkimi parametrami? – fabian

Odpowiedz

30

Po pierwsze, chcę powtórzyć, że jestem prawie pozytywny, że twój problem wynika z faktu, że adres URL, do którego przechodzisz debugger nie jest generowany dynamicznie. Znacznik adresu URL działa zasadniczo jako usługa przekierowująca. O ile nie jest to dokładnie to samo (co oznacza, że ​​metatagi w obiekcie meta url są takie same jak te w adresie URL, który podajesz), ponieważ testowany adres URL nie przyniesie oczekiwanych rezultatów.

Metatag

<meta property="og:url"> 

musi być generowane dynamicznie. Debugger jest przekierowywany na domyślną stronę indeksu zamiast dynamicznie generowanej strony.

Na przykład przypisać identyfikator do każdego obiektu używam, a więc muszę coś jak następuje

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

I przechodzą w tym dokładny adres URL do debuggera, a więc końcowy strona debugger znajdzie się pod tym dokładnym adresem URL.

Również w dalszej

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

jak jest własnością są generowane dynamicznie? Czy pamiętasz, aby ustawić swój rzeczywisty kod podobny do poniższego?

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

też wydają się być wtykając wszystko do zawartości, co jest niebezpieczne i może spowodować ogromne bóle głowy, które mogłyby być problem tutaj. Zamiast tego pchnij tylko jedną rzecz, np.? Type = bistro, a następnie propaguj niezbędne dane z DB.

Polecam dynamicznie generowanie większości tagów OG na podstawie object_id. Zapisz odpowiednie informacje OG dla każdego id_obiektu, a następnie rozpowszechniaj je, gdy uzyskasz do nich dostęp. W ten sposób możesz także łatwo rozwinąć i edytować znaczniki używane podczas aktualizacji OG.

Jeśli masz problemy z OG, nie powinieneś zawracać sobie głowy publikowaniem ich jako nowych pytań zamiast komentarzy, ponieważ gwarantuję, że inne osoby również mają ten sam problem.

+0

@ Lego Teraz dynamicznie generuję metatagi z czymś, nad czym obecnie pracuję i działało dobrze. Czy mogę zobaczyć, jak mijasz w usłudze URL? Na przykład w przykładowym kodzie faktycznie nie uwzględniono jawnie przekazanych parametrów. Zrewidowałem swoją odpowiedź, aby rozwinąć więcej na ten temat. – saccharine

+0

@Lego Debuger będzie nadal ignorował wszystkie twoje parametry, o ile obiekt URL nie jest dynamiczny i wskazuje na twoją stronę bez parametrów, tak jak to masz teraz skonfigurowane. Czy możesz umieścić metatagi podczas przeglądania źródła URL-a, który przechodzisz do debuggera? – saccharine

+0

Dzięki za tonę! Przekazałbym ci dziesięć razy, gdybym mógł! Prawie uwierzyłem, że nie jest to możliwe, ale sprawiłeś, że spróbowałem jeszcze raz. Miałeś rację z dynamicznym adresem URL i nareszcie działa! Zaktualizowałem moje [pytanie] (http://stackoverflow.com/q/8431694/601466) powyżej. – borisdiakur

1

Po kliknięciu linku Pobierz kod w typach obiektów, czy próbowałeś wkleić kod, który Ci dał?
Próbowałbym wkleić do twojej strony internetowej, a następnie, jeśli to działa, zreplikować wyjście html.
Wypróbuj bez tagu DOCTYPE.
Oto próbka tego, co mam, i nie widzę tych tagów powyżej: fb: app_id, nie jestem pewien, czy to robi różnicę.
Ponadto, czyż adres og: url nie powinien zawierać zmiennych na końcu?

< głowa prefix = "og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# www: http://ogp.me/ns/website#" >
< nieruchomość meta = "fb: app_id" content = "1234567888" >
< nieruchomość meta = "og: url" content = "http://mysite.com/index.php?type=MY_APP_NAMESPACE%3Abistro" >

1

Tak, działa jak czar, ale potrzebuje trochę przekodowania. Musiałem stworzyć nową stronę tak:

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

dla Joomla Opengraph Meta dynamiczna:

<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 na https://developers.facebook.com/tools/debug – MilosK

+0

Możesz prawdopodobnie zastosować to samo podejście do SMARTY. – blackhawk

3

jestem dość pewny Facebook nie indeksuje żadnych adresów URL z parametrami. Zawsze "przekierowuje" do obnażonej wersji adresu URL.

W przykładzie Ops:

http://example.com/index.php?type=restaurant&title=luigis

staje

http://example.com/index.php

niezależnie od tego, co robisz. Najbliższy rzeczą, jaką widziałem do wyjaśnienia jest this:

A URL with no session id or extraneous parameters. All shares on Facebook will use this as the identifying URL for this article. 
Powiązane problemy