Facebook Stream mit fb_stream.module veröffentlichen
Eingetragen von schneseb (160)
am 21.11.2010 - 00:02 Uhr in
am 21.11.2010 - 00:02 Uhr in
Hallo zusammen,
ich habe mir das fb Projekt installiert und nach einigen Konfigurationshürden auch (ohne Fehler) am Laufen. Jetzt möchte ich gerne folgendes machen und habe da so kleine Verständnisprobleme.
Ich möchte nach dem Speichern von neuem Content (also eines Nodes) die Möglichkeit haben, den Text zusätzlich auf Facebook zu veröffentlichen. Jetzt habe ich da denke ich schon das richtige gefunden: http://drupal.org/node/933988
Ich habe nun folgende Fragen:
- Wo genau muss ich diesen Code einfügen?
- Ich möchte den Inhalt nicht direkt über meinen Useraccount verteilen, sondern über eine Seite die ich extra eingerichtet habe (für die habe ich natürlich auch die Berechtigung)
Kann mir da jemand behilflich sein?
Vielen Dank und Grüße
Sebastian
- Anmelden oder Registrieren um Kommentare zu schreiben
ich habe mir gedacht, dass
am 21.11.2010 - 14:00 Uhr
ich habe mir gedacht, dass ich aus dem Code einfach mal ein Modul mache. Dazu habe ich nun eine .info Datei erstellt
; $Id$
name = FacebookStream
description = Sends postings to facebook
core = 6.x
package = Facebook
und dann das Modul:
<?php
// $Id$
/**
* Implements hook_form_alter().
*
* Adds a checkbox to node edit and comment forms. This checkbox lets
* facebook users know that content may be published to their Wall,
* and gives them a chance to prevent that.
*/
function facebookstream_form_alter(&$form, $form_state, $form_id) {
// Add stream publish option.
if (isset($GLOBALS['_fb']) && fb_facebook_user()) {
if ($form['#id'] == 'node-form') {
// Add checkbox to control feed publish.
$form['facebookstream']['stream_publish'] = array(
'#type' => 'checkbox',
'#title' => 'Share on Facebook',
'#default_value' => TRUE,
);
}
elseif ($form['form_id']['#value'] == 'comment_form') {
// Add checkbox to control feed publish.
$form['facebookstream']['stream_publish'] = array(
'#type' => 'checkbox',
'#title' => 'Share on Facebook',
'#default_value' => TRUE,
);
}
}
}
/**
* Implements hook_nodeapi().
*
* Publish to facebook Walls when users submit nodes.
*
* @see <a href="http://developers.facebook.com/docs/reference/rest/stream.publish" title="http://developers.facebook.com/docs/reference/rest/stream.publish" rel="nofollow">http://developers.facebook.com/docs/reference/rest/stream.publish</a>
* @see <a href="http://developers.facebook.com/docs/guides/attachments
" title="http://developers.facebook.com/docs/guides/attachments
" rel="nofollow">http://developers.facebook.com/docs/guides/attachments
</a> */
function facebookstream_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if ($op == 'insert' || $op == 'update') {
if (isset($node->stream_publish) && $node->stream_publish) {
$attachment = array(
'name' => $node->title,
'href' => url('node/' . $node->nid, array('absolute' => TRUE)),
'description' => filter_xss($node->teaser, array()),
);
/*
if ($picture = $GLOBALS['user']->picture) {
$url = url($picture, array('absolute' => TRUE));
$attachment['media'][] = array(
'type' => 'image',
'src' => $url,
'href' => $url,
);
}
*/
if ($logo_path = theme_get_setting('logo_path')) {
$url = url($logo_path, array('absolute' => TRUE));
//dpm($logo_path, "logo_path is $logo_path and url is $url");
$attachment['media'][] = array(
'type' => 'image',
'src' => $url,
'href' => $url,
);
}
$user_message = t('Check out my latest post on !site...',
array('!site' => variable_get('site_name', t('my Drupal for Facebook powered site'))));
$actions = array();
$actions[] = array(
'text' => t('Read More'),
'href' => url('node/' . $node->nid, array('absolute' => TRUE)),
);
fb_stream_publish_dialog(array('message' => $user_message,
'attachment' => $attachment,
'action_links' => $actions,
));
}
}
// Another way to add like button, as part of a node.
if ($op == 'view' && variable_get('facebookstream_nodeapi_add_like', FALSE)) {
$url = fb_scrub_urls(url('node/' . $node->nid, array('absolute' => TRUE)));
$node->content['dff_like'] = array(
'#value' => "<fb:like href={$url}></fb:like>",
'#type' => 'markup',
'#prefix' => '<div class="dff_like_wrapper">',
'#suffix' => '</div>',
);
}
}
/**
* Implementation of hook_comment().
*
* Publish to facebook Walls when users submit comments.
*/
function facebookstream_comment(&$a1, $op) {
if ($op == 'insert' || $op == 'update') {
if ($a1['stream_publish']) {
//dpm($a1, "facebookstream_comment, publishing to stream");
$node = node_load($a1['nid']);
// http://wiki.developers.facebook.com/index.php/Attachment_(Streams)
$attachment = array(
'name' => $a1['subject'],
'href' => url('node/' . $a1['nid'], array('absolute' => TRUE, 'fragment' => 'comment-' . $a1['cid'])),
'description' => $a1['comment'],
//'properties' => array(t('In reply to') => array('text' => $node->title, 'href' => url("node/" . $node->nid, array('absolute' => TRUE)))),
);
if ($logo_path = theme_get_setting('logo_path')) {
$url = url($logo_path, array('absolute' => TRUE));
//dpm($logo_path, "logo_path is $logo_path and url is $url");
$attachment['media'][] = array(
'type' => 'image',
'src' => $url,
'href' => $url,
);
}
$user_message = t('Check out my latest comment on !site...',
array('!site' => variable_get('site_name', t('my Drupal for Facebook powered site'))));
$actions = array();
$actions[] = array('text' => t('Read More'),
'href' => url('node/' . $a1['nid'], array('absolute' => TRUE)),
);
fb_stream_publish_dialog(array('message' => $user_message,
'attachment' => $attachment,
'action_links' => $actions,
));
}
}
}
?>
Soweit so gut, ich habe es auf meinen Webspace geladen und unter den Modulen eingeschaltet - auch ohne Probleme. Nur ich stelle gar keine Auswirkungen fest. Ich hätte jetzt erwartet, dass ich bei der Blogeintragerzeugung oder Änderung eine Möglichkeit vorfinde meinen Beitrag auf Facebook zu veröffentlichen. Aber da ist nichts.
Dann hatte ich mir noch gedacht, es könne daran liegen, dass Drupal vielleicht nicht, dass ich einen Account habe. Deshalb habe ich per "Facebook Connect" noch meine Applikation verbunden. Es ändert sich aber auch nichts.
Wahrscheinlich ein Denkfehler - aber ich finde ihn nicht :-)
Danke
Sebastian
Hallo, stehe vor dem gleichen
am 15.12.2010 - 14:23 Uhr
Hallo,
stehe vor dem gleichen Problem. Hast Du es mittlerweile lösen können?
Viele Grüße
jD
Hallo jD, nein leider noch
am 15.12.2010 - 14:29 Uhr
Hallo jD,
nein leider noch nicht. Habe mich versucht noch auf anderen Wegen schlau zu machen, aber ich konnte noch nichts in Erfahrung bringen. Wäre für mich auch noch interessant.
Gruß
Sebastian
Workaround?
am 12.01.2011 - 17:34 Uhr
Hallo!
Schließe mich an. Habe Ähnliches vor und das gleiche Problem.
Ich bin anders vorgegangen. Da bei mir das "fb" Modul überhaupt nicht funktioniert (und teilweise die Seite komplett lahm legt) habe ich es mit diesem hier versucht: Facebook (Live) Stream – http://drupal.org/node/483570. In Zusammenarbeit mit FB Connect, klappt alles sehr gut. Ich kann für den jeweiligen Node-Typ eingeben, dass und was er "streamen" soll.
Ich nutze Drupal 6. Das Projekt, für das ich diese Funktion benötige, ist so gedacht, dass Besucher der Seite, Bilder hochladen können und diese dann auf eine Landkarte lokalisieren sollen (natürlich mit Spamschutz etc.). Umgesetzt wurde das über einen Node-Typ, inklusive CCK und Views Anbindung. Im Anschluss an die Erstellung der Node soll die Verbindung zu Facebook hergestellt, der Besucher soll sich dann jeweils mit seinem Account einloggen und daraufhin seinen Beitrag posten können.
Grundsätzlich klappt das schon recht gut: Also nach dem Speichern erscheint das Connect-Fenster und man kann seinen Inhalt bzw. einen Link auf Facebook posten. Das einzige Problem ist, dass ich gerne eine Darstellung in Facebook hätte, die der einer durch den "Share Button" hervorgerufenen gleicht. Allerdings sieht der Link in Facebook eher aus wie ein Like-Link, also ohne Bild und Möglichkeit den Text zu verändern etc. Da es aber aufs Bild ankommt, wäre es mir schon wichtig, dass es in Facebook erscheint.
Ich habe zwischenzeitlich schon überlegt, ob es irgendwie Sinn macht, einen anderen Weg zu gehen und über eine Regel (Nach Speichern eines Node-Typs) die Facebook Share Aktion aufzurufen. Allerdings weiß ich nicht wie, und ob das überhaupt funktioniert. Was meint Ihr?
Grüße,
Maria
Hallo Maria, dein Workaround
am 12.01.2011 - 20:07 Uhr
Hallo Maria,
dein Workaround klingt für mich sinnvoll bzw. adaptierbar. Eine Frage, handelt es sich bei dir um eine Facebook Seite oder ein Facebook Profil selber (oder ist das egal und in FB Connect einstellbar? Ich kenne das Modul nicht)? Wenn ja würde ich das gerne auch mal versuchen nachzustellen wie bei dir.
Das mit dem Bild muss ja irgendwie gehen, so macht Hootsuite das ja auch. Dann könnten wir irgendwie zusammen weiter probieren, denn an einem Bild hätte ich auch Interesse :-)
Grüße
Sebastian
Es geht ja darum, dass die
am 12.01.2011 - 21:03 Uhr
Es geht ja darum, dass die Benutzer sich anmelden... Also handelt es sich i.d.R. um Profile.
Wenn ich es also über meine erste skizzierte Variante versuche (Fb-Connect + Facebook (Live) Stream), erhalte ich diese Darstellung...http://cl.ly/0v1f3S1S2c3q2w0d1t3V – Eigentlich perfekt außer eben das Bild, das von der Seite mit muss (btw. wenn ich bei Facebook nicht eingeloggt bin, erscheint im js overlay die Login Box – quasi perfekt!).
Ich schau mir das Modul noch mal ganz genau an, verstehe allerdings nicht so viel von PHP. Vielleicht kannst du, wenn du Zeit hast, mal drin "wühlen". ;)
Grüße,
Maria
Kommando zurück!
am 12.01.2011 - 22:11 Uhr
Also ich habe jetzt noch mal alles genau überprüft: Die Funktionalität, die ich oben beschrieb, geht nicht vom "Stream" Module aus, sondern direkt vom FB:Connect Modul. Umso besser, denn je weniger Module damit zu tun haben, um so besser.
Ich habe auch schon herausgefiltert, an welcher Stelle ich ansetzen muss, nämlich hier (fbconnect_stream_publish/fbconnect_stream_publish.module):
function fbconnect_stream_publish_render_js($feed) {
global $base_url;
$site = variable_get('site_name', $base_url);
switch ($feed['type']) {
case 'comment':
$autopublish = 'false';
$attachment = array(
'name' => $feed['title'],
'href' => $feed['nodeurl'],
'caption' => t("{*actor*} commented at !site", array("!site" => $site)),
'description' => strip_tags($feed['comment']),
);
$action_links = array(
array(
'text' => $site,
'href' => $base_url,
),
);
$message = t('I posted a comment on !site_name.', array('!site_name' => variable_get('site_name', 'Drupal')));
break;
case 'node':
$autopublish = 'false';
$attachment = array(
'name' => $feed['title'],
'href' => $feed['nodeurl'],
'caption' => t("{*actor*} created some content at !site", array("!site" => $site)),
);
$action_links = array(
array(
'text' => $site,
'href' => $base_url,
),
);
$message = t('I posted new content on !site_name.', array('!site_name' => variable_get('site_name', 'Drupal')));
break;
case 'register':
$autopublish = 'true';
$attachment = array(
'name' => t('Welcome to @site', array('@site' => $site)),
'href' => $base_url,
'caption' => t("{*actor*} has registered at !site", array("!site" => $site)),
);
$action_links = array(
array(
'text' => $site,
'href' => $base_url,
),
);
$message = t('I just became a member at !site_name!', array('!site_name' => variable_get('site_name', 'Drupal')));
}
Und nun werde ich mal etwas spielen... :)
Nachtrag:
Ich habe versucht folgendes unterzubringen:
'media' => array(array('type' => 'image', 'src' => $url_img, 'href' => $lnk_img)));
(siehe http://forum.developers.facebook.net/viewtopic.php?id=45331) – leider ohne Erfolg. Wahrscheinlich (hoffentlich) liegt es nur an einer Kleinigkeit. Ich habe wirklich das Gefühl, dass das hier die Lösung sein könnte.
Hallo, mhh also mein
am 12.01.2011 - 22:42 Uhr
Hallo,
mhh also mein "Usecase" ist, dass ich auf meiner eigenen Internetseite bin und einen Artikel veröffentliche. Dann habe ich bei Facebook eine Seite (natürlich habe ich auch ein Profil mit dem ich mich anmelde) auf der der Beitrag zusätzlich (zumindestens mit dem Teaser, Hauptsache überhaupt was...) auf der Facebook Seite veröffentlichen.
Das andere muss ich noch anschaun...
Grüße
Sebastian
An deiner Stelle würde ich
am 12.01.2011 - 23:38 Uhr
An deiner Stelle würde ich anders vorgehen: Via Views einen Feed ausgeben und mit der Facebook Anwendung RSS Graffiti die Beiträge auf der Facebook-Seite veröffentlichen.
Grüße,
Maria
Hallo Maria, ja das habe ich
am 13.01.2011 - 13:39 Uhr
Hallo Maria,
ja das habe ich auch schon mal gemacht. Ich würde aber lieber aktiv die Schnittstelle ansprechen (wie bei Twitter) und das auf die Wall schreiben. Vielleicht entsteht dadurch noch die ein oder andere Idee mehr :-)
Gruß
Sebastian