Facebook Graph Auth Token auf die gemütliche weisse!

Geschrieben am 14.05.2010 in Code Works

Habt ihr schonmal gesehen was Facebook will damit man an einen Facebook Graph Auth Token kommt? Schrecklich… Und für viele sachen einfach total umsonst! Also warum nicht einen Zentralen token abfragen können? Und natürlich geht das mit etwas cURL und PHP! Die Idee ist, einfach eine Dummie User anzulegen, sich damit einloggen, und den Token von der Beispielseite zu entwenden.

Ganz simple!

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://login.facebook.com/login.php?');
curl_setopt($ch, CURLOPT_POSTFIELDS, 'email=' . urlencode("DUMMIE_EMAIL") . '&pass=' . urlencode("DUMMIE_PASSWORT") . '&login=' . urlencode("Log in"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, "fbcookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "fbcookies.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12");
$login = curl_exec($ch);
curl_setopt($ch,CURLOPT_URL,"http://developers.facebook.com/docs/api");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,50);
curl_setopt($ch, CURLOPT_COOKIEJAR, "fbcookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "fbcookies.txt");
$data = curl_exec($ch);
curl_close($ch);

$token = explode('<a href="https://graph.facebook.com/',$data);
$token = explode('?access_token=',$token[1]);
$token = explode('">',$token[1]);
echo $token[0];
?>

Funktioniert auch bei Safemode ON!

Einfach deine E-Mail adresse und dein Passwort einsetzen, bzw das des Dummies. Gegebenenfalls die Cookie Datei “fbcookies.txt” erstellen und beschreibbar machen, und schon kann man das Script ohne Inputs Requesten und bekommt seinen Facebook Auth Token! Viel Spass! xD

EDIT:// Seit neuestem Tritt nach ein paar Versuchen ein Fehler auf, dann muss der User sich erst selbst einloggen und eine lächerliche aber lustige Prozedur über sich ergehen lassen um letztendlich dem jeweiligen Server den Zugriff entgültig zu erlauben.

0 Kommentare -

Facebook Graph Data Extractor (fbstalk [Alpha*])

Geschrieben am 11.05.2010 in Code Works, Freebies, Social Networks

fbstalk ist ein Script zur Abfrage von Daten der Facebook Graph Api! Unter anderem kann man User suchen, derren Wall betrachten und sehen was diese user gerne Mögen, welche Gruppen sie beiwohnen und auf welche Events sie eingeladen werden.

Nachdem klar wurde was die Facebook Graph Api alles kann, wollte ich mir auf keinen Fall nehmen lassen das bis ins letzte auszunutzen. Ich gehe stark davon aus das die meisten Facebook User nie wieder einen Job bekommen würden wenn alle Chefs der Welt dieses Script hätten! Es kann aber auch nützlich sein wenn man sein Profil aufräumen möchte und erkennt das Facebook einen das jetzt nicht mehr wirklich ermöglicht. Oder dem Namen nach, einfach zum stalken… ^^

Update:// Jetzt mit Token Spiegel Server!

Von mir aus könnt ihr mit dem Script machen was ihr wollt! Wenn ihr es im Netz weiter gebt möchte ich allerdings das ihr auf diese Page verlinkt und nicht auf das Script selbst.

Ich gehe hier von Linux aus, wer das Script in anderen Systemen nutzen will muss es selbst ändern… Sorry baue an einer Plattformübergreifenden Applikation!

Also wie gesagt nutze ich dafür einfach die Facebook Graph Api, das Script selbst ist in Ruby.

Abhängigkeiten Installieren

sudo apt-get install ruby rubygems
sudo gem install colored
sudo gem install hpricot
sudo gem install json

Sorry für die colored abhängigkeit, nur da kommen sooo viele Daten teilweise das es einfach seine Farbliche Ordnung braucht!

Installation
Vereinfacht geht die installation so:

sudo ./fbstalk.rb install

Manuell so:

sudo cp ./fbstalk.rb /usr/bin/fbstalk
sudo chmod 755 /usr/bin/fbstalk
touch ~/.fbstalk

Verwendung

Wenn man den Installations Schritt nicht machen will / kann ruft man das Script immer folgendermassen in der Shell auf:

ruby /path/to/fbstalk.rb find anybody

Dann muss man einen Token setzen. Facebook möchte das man dafür eine Applikation Registriert und sich dann umständlich Authentifiziert (wirklich umständlich… die haben ja keine Ahnung xD)… Ich will das jedenfalls nicht und mache das einfach folgendermassen

Eigenen Token bekommen:

  • http://developers.facebook.com/docs/api – als in Facebook eingeloggter Besuchen
  • Den allerersten Link auf der Seite klicken (im 2. Textblock – https://graph.facebook.com/****).
  • Den Teil hinter “?access_token=” kopieren
  • Nun hat man seinen TOKEN

oder mit folgender Funktion.

Token vom Token-Spiegelserver:

fbstalk token get
EXPERIMENTELL! Hier ist die suche aber ungenauer. Sonst wäre sie auf eure Umgebung eingestellt
Token setzen:

fbstalk token "TOKEN"

Token lesen:

fbstalk token show

Personen suchen:

fbstalk find anybody@example.com
fbstalk find anybody somebody

Personen suchen mit Geschlecht und Geburtsdatum in der Ausgabe wenn möglich:

fbstalk dfind anybody@example.com
fbstalk dfind anybody somebody

Info über eine Person (Url Prefix oder ID)

fbstalk info anybody
fbstalk info 154574621
Hier hatte ich teilweisse eine viel Detailierter Ausgabe, dann nicht mehr.. gehe dem nach!

Wall von einem User (Url Prefix oder ID)

fbstalk wall anybody
fbstalk wall 156421355
Leider / Gottseidank recht oft gesperrt für aussen

Gruppen eines Users (Url Prefix oder ID)

fbstalk groups 1515421332
fbstalk groups anybody
Funktioniert nur bei Freunden des Token ursprungs

“Likes” eines Users (Url Prefix oder ID)

fbstalk like anybody
fbstalk like 154654654
Funktioniert absolut uneigeschrenkt bei jedem!

Events zu denen ein User eingeladen wurde (Url Prefix oder ID)

fbstalk events 1565465465
fbstalk events anybody
Die Antwort des Users muss momentan noch Manuell geprüft werden

Bekannte Fehler

bad URI(is not URI?)

/usr/lib/ruby/1.8/uri/common.rb:436:in `split': bad URI(is not URI?): ...

Dieser Fehler weisst auf einen fehlerhaften Token hin. Kommt gern wenn man den token vom Spiegel Server mit token get holt!

500 Internal Server Error

/usr/lib/ruby/1.8/open-uri.rb:277:in `open_http':
500 Internal Server Error (OpenURI::HTTPError) ...

Die häufigste Ursache hierfür ist ein Abgelaufener, oder auch ein Total Falscher Token.

Weitere Fehler, Fragen oder Anregungen, bitte posten!

5 Kommentare -

Ultimative PHP Browser detection funktion!

Geschrieben am 07.05.2010 in Code Works

Im laufe eines Projekts habe ich diesen Code zusammengewürfelt. Stundenlange kleinarbeit, und ja man hätte es kürzer fassen können aber es funktioniert! Der Code holt Browser und Versionsnummer aus der $_SERVER['HTTP_USER_AGENT'] Variable. Ich habe natürlich nicht einmal annähernd alle Browser getestet, aber es ist simple genug um keine Fehler darin zu haben. Das Script detected bis zu 142 verschiedene Browser und fast alle mit Versionsnummern!!!

Es ist zu gross um es hier zu posten (fast 600 Zeilen) darum: [DOWNLOAD]

Suchmaschinen Bots, Mobile Browser und Betriebsystem Folgen!

0 Kommentare -

History Hack mit jQuery

Geschrieben am 15.04.2010 in Code Works

Momentan wo Firefox anscheinend eine Lösung für diese schon seit immer existierende Lücke gefunden hat, wird ja wieder viel darüber diskutiert. Es geht darum mit JavaScript und der CSS pseude Klasse :visited herauszufinden welche Seiten der Besucher noch in seiner History hat. Schon vor längerer Zeit habe ich mit einem Script begonnen das einen auf Basis dieses Tricks verschiedenste Daten auflistet. Und gerade bin ich dabei das etwas auszubauen mit der Idee vieleicht durch “Gruppenzugehörigkeit” auf Facebook und anderen Communites die echten Namen der User in Erfahrung zu bringen. Wie es ein Forschungsteam vor kurzem tat.

Aber genug dazu, wenn ich Fertig bin bekommt ihr es sowieso zu sehen und erklärt. Aber ich möchte euch noch einen kleinen Source geben der Zeigt wie das aussehen könnte:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
// Link check Funktion
   function c_link(id, out){
     if ($("a#"+id+":visited").length) {
       community[i] = out;
       i = community.length;
     }
   }
// Variablen Setzen
   community = [];
   i = 0;
// und checken
   $(document).ready(function(){
      c_link('facebook','Facebook');
      c_link('netlog','Netlog');
      c_link('myspace','MySpace');

     $("#community").html(community.join(', '));
   });
</script>
<div style="display:none;">
  <a href="http://facebook.com" id="facebook">Facebook</a>
  <a href="http://netlog.com" id="netlog">Netlog</a>
  <a href="http://www.myspace.com/" id="myspace">MySpace</a>
</div>
<span id="community"></span>

Wie man sieht EXTREM simple!

0 Kommentare -

Twitter Merchandise Bot

Geschrieben am 03.04.2010 in Code Works

Twitter ist zu einem wichtigen Werbemittel geworden, wie wäre es also wenn wir einfach die Twitter Datenbank nach usern durchsuchen die über Themen die zu unserer Werbung passen schon einmal getwittert haben? Genau! Es wäre genial! Meine Suche ob und wie solche Twitter Bots schon existieren haben ein paar teure Scripte und kostspieliege Anfragen zum vorschein gebracht. Was ich für mich korreckt halte wenn man sieht wie einfach das ganze ist… Darum hier eine simple umsetzung in PHP eines sehr Praktischen Twitter Bots.

Achtung: Twitter sieht das natürlich nicht gerne, darum mass das ganze einfach recht langsam sein, und nicht immer das selbe sein!

Hier der ganze Bot:

<?php
  // Zufalls URL
  function url(){
    $links = array("http://snipurl.com/test",
                   "http://rurl.org/test"
    $link_c = count($links);
    $rand = rand(1,$link_c)-1;
    return $links[$rand];
  }

  // Zufalls Nachricht
  function message(){
    $mess = array("Nachricht 1",
                   "Nachricht 2"
                  );
    $mess_c = count($mess);
    $rand = rand(1,$mess_c)-1;
    return $mess[$rand];
  }
 
  // Send
  // Erneuere deinen Twitter Status, mit einem @username
  function send($user){
    $username = 'username'; // Ersetzen!!
    $password = 'password'; // Ersetzen!!
    $message = "@".$user." ".message()." ".url();
    $url = 'http://twitter.com/statuses/update.xml';
    $curl_handle = curl_init();
      curl_setopt($curl_handle, CURLOPT_URL, "$url");
      curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
      curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($curl_handle, CURLOPT_POST, 1);
      curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message");
      curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password");
      $buffer = curl_exec($curl_handle);
      curl_close($curl_handle);
  }

  // Suche
  // Durchsuche Twitter nach einer Phrase
  function search($phrase){
    $user = array(); // Leeres Array erstellen
    // q = suchphrase; rpp = ergebniss anzahl
    $filename = 'http://search.twitter.com/search.atom?q='.$phrase.'&rpp=100';
    $xml = simplexml_load_file($filename);
    if($xml) {
      foreach($xml->entry as $x) {
        $x = str_replace("http://twitter.com/","",$x->author->uri);
        array_push($user, $x); // User hinzufügen
      }
      $user = array_unique($user); // Keine Doppelten User
      return $user;
    }
  }
 
  // Verarbeiten
  // Braucht die "q" Variable beim URL Aufruf
  // q stellt die Phrase dar nach der gesucht wird.
  if(isset($_GET['q'])){
    $user = search($_GET['q']);
    foreach ($user as $u){
      sleep(rand(2,250)); // Wichtig! Warten zwischen 2 und 250 Sekunden!
      send($u);
      print "USER: ".$u." OK<br />";
    }
  }

Grundsätzlich ist das alles ganz einfach, und könnte an ein paar Stellen auch noch etwas vereinfacht werden. Ich finde es so aber übersichtlicher. Zur Erklärung:

url(): Zufällige URL um Twitter zu verwirren!
message(): Auch um Twitter zu verwirren, aber auch für Werbezwecke besser!
send($username): Verschickt zufalls Nachricht und URL mit @username.
search($phrase): Durchsucht Twitter nach Tweets mit der Phrase

Ganz einfach oder?
Manche Server haben einen recht geringen Timeout, also würde das Script sehr bald einfach abgebrochen werden. Einfach ausprobieren und sonst notfalls mit einer Lokalen Apache Maschine ausführen!

Achtung: Alle Tests führten zu gesperrten Accounts… Wenn jemand den Schlüssel kennt bitte her damit!

Viel Spass beim Botten! Und verdammt nur für brave Sachen verwenden!!!

0 Kommentare -

Valide Youtube Videos Einbinden

Geschrieben am 09.03.2010 in Code Works

Es war ein richtiger Shock für mich als der W3C Validator ohne vorwahnung plätzlich anfing Fehler auszuspucken… Und alles nur wegen ein paar Youtube Embed’es?! Ja es ist wahr, Youtube Embed Codes sind nicht XHTML Kompaktibel… Aber es gibt wie immer für alles eine Lösung

Youtube gibt einen einen Code wie diesen hier, um sein Video einzubinden:

<object width="480" height="385"><param name="movie"
value="http://www.youtube.com/v/bqL8ls8CaEA&hl=en_US&fs=1&"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/bqL8ls8CaEA&hl=en_US&fs=1&"
type="application/x-shockwave-flash" allowscriptaccess="always"
allowfullscreen="true" width="480" height="385"></embed></object>

14 Errors, 12 warning(s), als ergebniss von einem Youtube Video in einem korrekten XHTML Grundgerüst… Aber was wäre ich wenn ich keinen Weg wüsste dagegen vorzugehen? xD
weiterlesen…

3 Kommentare -

CSS 3, was es da so gibt und wie es geht.

Geschrieben am 09.03.2010 in Code Works

CSS 3 geistert nun schon eine ganze weile herum, wirklich genutzt wird es momentan nur selten weil nicht alle Browser darauf anspringen. Aber die Möglichkeiten die einen mit CSS 3 gegeben werden sind genial und erweitern die Webprogrammierung um ein paar sehr nützliche Funktionen. Mit diesem Artikel möchte ich einen kleinen überblick über CSS 3 geben!

Eigentlich sah mein Plan vor paralell zu diesem Artikel mein Design nochmal mit CSS 3 zu überarbeiten, aber solange mein Schatz Opera dies nicht so darstellt wie ich es will wird daraus noch nichts ^^
weiterlesen…

0 Kommentare -

BB Code implementieren in PHP

Geschrieben am 28.02.2010 in Code Works

Ich brauchte die Funktion erst kürzlich, also dachte ich ich kann sie ja auch gleich mit euch teilen!

Mit dem Folgenden Code werden die wichtigsten Punkte von dem BBCode mit PHP implementiert, bzw. werden einfach die BBCode Stücke mit passendem HTML ersetzt

Es erklärt sich eigentlich recht von allein, vorausgesetzt man versteht Reguläre Ausdrücke, wenn nicht wird hier später mal ein Link zu einem Zukünftigen Tutorial zu finden sein ^^
weiterlesen…

0 Kommentare -

mit jQuery auf Tastendruck reagieren!

Geschrieben am 18.02.2010 in Code Works

Im Zuge einiger Tests bezüglich eines Ajax Games brauchte ich dringend Tastenfunktionen, ich war richtig Schockiert wie leicht das geht!
Also es ist ein leichtes auf jegliche Tasten und oder Tastenkombination mit jQuery zu regieren! Wirklich simple!

Ersteinmal wollte ich eine Funktion die mir die den jeweiligen String Code ausgibt.
Nichts leichter als das! (jQuery nicht vergessen ^^)
weiterlesen…

0 Kommentare -

Latest Tweets Box – PHP, SimpleXML, Ajax und die Twitter API

Geschrieben am 16.02.2010 in Code Works

Wie ihr rechts in meiner Sidebar seht hab ich mir eine Last Tweets Box gebastelt ^^
Natürlich gibt es da viele Plugins die das auch erledigen können, aber gleich nach der Installation des ersten war mein Wordpress kaputt, ich hab nirgends mehr auch nur irgendwas angezeigt bekommen, und dar ich die Twitter API sowieso mehr als nur gut kenne hab ich kurzerhand etwas eigenes gebastelt!
weiterlesen…

1 Kommentar -
« vorherige Seite
Fetter Dubstep, check it our!