Direkt zum Hauptbereich

Facebook Photo Upload and Tagging a user on this Picture

So mit der Facebook GRAPH API lässt sich ja einiges machen. Ich widme mich heute mal dem Photo Upload. Und biete hierzu auch ein paar Code Samples an welche man benutzen kann.

So let`s go. Am einfachsten mit der GRAPH API zu arbeiten ist es wenn wir mit dem Offiziellen PHP Packet von Facebook arbeiten. Dies gibts unter GITHUB:
https://github.com/facebook/php-sdk/

Hier noch ein kleines Beispiel wie man dieses Paket zum laufen bringt:
include_once('facebook.php');

class facebookFactory {

private $facebook;
private static $instance = null;

private function __construct() {
$this->facebook = new Facebook(array(
'appId' => APP_ID,
'secret' => APP_SECRET,
'cookie' => true,
));
}

private function __clone() {

}

public static function getInstance() {
if(! self::$instance) {
self::$instance = new facebookFactory();
}

return self::$instance;
}

public function getFacebook() {
return $this->facebook;
}

}

Dies ist eine kleine Facebook Factory. Wer weiß ob man vielleicht das Offizielle Paket gegen ein anderes eintauscht. Im Konstruktor wird die Klasse Facebook aus dem facebook Packet instanziert. Dort werden alle nötigen Informationen, also APP_KEY, SECRET übergeben.
Diese Daten bekommt ihr von Facebook wenn ihr eine Anwendung erstellt.

So nun widmen wir uns dem Bilder Upload. Ich neige immer dazu "Fremdpackete" zu wrappen. Also nicht direkt auf die Methoden von der Klasse Facebook zurückzugreifen. Dazu habe ich ein "Arbeitstier" welche alle nötigen Methoden implementiert hat und einfach immer das Passende von der Klasse Facebook aufruft.

Um ein Bild hochzuladen mittels der "Graph" API hochzuladen. Hier ein kleinen Auszug meiner Upload Funktion welche die Facebook Upload Funktion anspricht:
$arguments = array(
'message' => 'Die Bildunterschrift :) ',
'tags'=>$this->makeTagArray($this->getRandomFriends($userId)),
'source' => '@' .realpath( BASEPATH . '/tmp/'.$imageName),
);
public function uploadPhoto($albId,$arguments) {
//https://graph.facebook.com/me/photos
try {

$fbUpload = $this->facebook->api('/'.$albId.'/photos?access_token='.$this->facebook->getAccessToken(),'post', $arguments);
return $fbUpload;
}catch(FacebookApiException $e) {
$e;
// var_dump($e);
return false;
}
}

In dieser Methode wird auf das Facebook Objekt zugegriffen und dann die API angesprochen. Dann den Pfad, also welche Methode, wir von der Graph API ansprechen wollen.
In meinem Fall übergebe ich eine ID eines Albums und Poste dort das Foto. Alternativ kann man auch einfach /me angeben. Dann handelt Facebook Automatisch die Alben.

Für diesen Aufruf ist wie bei allen Post aktionen ein Access Token notwendig. Diesen Liegert ebenfalls die Klasse Facebook.

Mit diesem Aufruf Posten wir ein Bild und Taggen direkt mal ein paar User. Hierzu erläuter ich noch die Methode makeTagArray:
private function makeTagArray($userId) {
foreach($userId as $id) {
$tags[] = array('tag_uid'=>$id, 'x'=>$x,'y'=>$y);
$x+=10;
$y+=10;
}
$tags = json_encode($tags);
return $tags;
}
Wie man sieht erstellt die Methode ein array welches ein Assoziatives Array mit sämtlichen Informationen zum Tag enthält. In meinem Fall wird der Methode einfach ein Array mit userIds von Facebook übergeben. Die Userids werden durchlaufen, die Position x und y wird aktualisiert und das wars dann auch schon.
Nun wird das Array zurückgegeben und steht nun ebenfalls als Argument für den Graph aufruf zur Verfügung. Die Option Tags muss immer ein array enthalten welches die Informationen für die Tags enthält, auch wenn man nur einen Tag hinzufügen möchte!

So ich hoffe es hat dem einen oder anderen weitergeholfen.

Feedback ist immer Wilkommen, und über lob wird sich gefreut.

Kommentare

fincha_com hat gesagt…
schlecht beschrieben, leider nutzlos :(

Beliebte Posts aus diesem Blog

Mean.io aggregate assets in the correct order

Im working with mean.io framework which builds some little helper around the mean stack, to make things faster. If you aggregate an assets, it helps a lot to know that you can easily set things into the correct order with the option weight. The default weight is 0 when you dont set this option: mean.io framework I18n.aggregateAsset('js', 'lib/angular-translate/angular-translate.js',{absolute:true, weight:100 });I18n.aggregateAsset('js', 'lib/angular-translate-storage-local/angular-translate-storage-local.js',{absolute:true, weight:101});I18n.aggregateAsset('js', 'lib/angular-translate-storage-cookie/angular-translate-storage-cookie.js',{absolute:true, weight:102});

Soziale Netze und die Sicherheit! Report Kwick!

Die Sozialen Netzwerke, neudeutsch: Social Networks, halten nicht allzu viel von Sicherheit. Vor allem müssten die Entwickler viel mehr für das Thema XSS Sensibilisiert werden. D enn Potentielle Angreifer finden jede Schwachstelle im System. Und wer lange genug sucht der wird imme r fündig. Es sollte den An greifern nur nicht allzu einfach gemacht werden. Kwick.de hatte bis zum 20.06.08 auch noch oder wieder ein Problem mit XSS. Betroffen waren so gut wie alle Suchformulare auf der Seite. Per zufall bin ich auf diesen Umstand aufmerksam geworden. Eines sei gesagt. Bei Kwick kann man sich nun getrost Anmelden denn die Sicherheitslücke wurde sofort behoben. Also eine sichere Sache. Andere Social Networks haben ähnliche XSS Probleme, eigentlich erschreckend viele. Die Namen möchte ich nicht nennen denn sonst rennen vielleicht ein Paar Dummys dahin und testen es gleich......... Nachdem ich dieses Problem dem Betreiber gemeldet hatte wurde es auch Postwendend behoben. Nur aus diesem Gru

Flexible Arbeitgeber sind schwer zu finden ;)

Unternehmen, fast schon egal welcher Größe verlangen nach flexiblen Arbeitskräften. Und schimpfen sich selbst flexibel und bieten gar sogenannte "Flexiblen Arbeitszeiten" an. Und das thema "Home Office" wird auch gerne mal groß auf die Fahne gemalt und man denkt sich als Bewerber: "na das ist doch mal eine tolle Firma, da will ich hin" Doch zumeist entpupt sich diese tolle flexible Unternehmung vor allem als eines, eine kleine Mogelpackung. Frei nach dem Motto: "schreiben können wir ja vieles". So erwarten die Firmen das ich flexibel bin, dann weißt man auf ein "Flexible Arbeitszeit hin", mit einem dicken aber ,  so wie die CSU zur EU, von 9 bis 16 Uhr ist aber Kernarbeitszeit. Aha. Das klingt jetzt total flexibel für mich. Bei einem Wochensoll von 40h kann ich also jeden Tag überlegen wann ich denn jetzt um 8 komme oder um 9, denn teilweise sollte man ja auch nicht vor 7 kommen, sonst macht man ja eine Überstunde jeden Tag. So