login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Graph Api oAuth

Offline finduilas - 04/04/2011 12:11
Avatar van finduilasPHP gevorderde Beste,

Ik ben momenteel op zoek hoe ik het eenvoudigst connectie kan maken (java/php) met facebook en een access token kan verkrijgen. Ik weet hoe de API zelf grotendeels in elkaar zit (gebruik hem vaak in flash; maar in javascript alleen krijg ik het niet echt voor elkaar. Ik heb de documentatie al overlopen (en de demos, maar die krijg ik niet werkende (toch niet met de access tokens die ik nodig heb.))

Hopelijk is er hier iemand die daar ervaring mee heeft.

15 antwoorden

Gesponsorde links
Offline ArieMedia - 04/04/2011 12:16
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Heb jij even geluk dat ik hier laatst een heerlijke class voor heb gevonden (php welliswaar) 

oorspronkelijk voor twitter, maar als je een paar parameters veranderd kan je hem volgensmij ook voor facebook gebruiken



uw oAuth class
Offline finduilas - 04/04/2011 12:54
Avatar van finduilas PHP gevorderde Dankjewel;

Alleen weet ik het niet; het lukt me dan wel om die access token te verkrijgen (niet met die klasse) maar ik ben er niet tevreden over..

  1. <head>
  2. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  3. <title>Facebook</title>
  4.  
  5. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
  6. </head>
  7. <body>
  8. <?php
  9.  
  10. $app_id = "*";
  11. $app_secret = "*";
  12. $my_url = "http://localhost/";
  13.  
  14. $code = $_REQUEST["code"];
  15.  
  16. if(empty($code)) {
  17. $dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
  18. . $app_id . "&redirect_uri=" . urlencode($my_url);
  19.  
  20. echo("<script> top.location.href='" . $dialog_url . "'</script>");
  21. }
  22.  
  23. $token_url = "https://graph.facebook.com/oauth/access_token?client_id="
  24. . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret="
  25. . $app_secret . "&code=" . $code;
  26.  
  27. $access_token = file_get_contents($token_url);
  28.  
  29. $graph_url = "https://graph.facebook.com/me?" . $access_token;
  30.  
  31. $user = json_decode(file_get_contents($graph_url));
  32. echo $access_token;
  33. echo("Hello " . $user->name);
  34.  
  35. ?></body>
  36. </html>


Nu doet ie het binnen de browser; met resultaat. Maar ik wil het met javascript weliswaar (dat de website niet word verlaten). Helaas is me dat niet zo gekend (toch niet da genre). Iemand die me een aanzet kan geven? Ik zie overal sterren momenteel ..
Offline ArieMedia - 04/04/2011 13:23 (laatste wijziging 04/04/2011 13:37)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Dan moet je met ajax-technieken gaan werken, wat eenvoudig kan met jQuery 

  1. $(document).ready(function() {
  2. $.ajax({
  3. url: "test.php",
  4. data: '?m=getuser',
  5. type: 'GET',
  6. dataType: 'json',
  7. success: function(resp){
  8. $('#fb').html('Hallo ' + resp['user']);
  9. }
  10. });
  11. });



  1. <?php
  2. $fb = new oAuth_fb();
  3. if($_GET['m'] == 'getuser') {
  4. return $fb->getUser();
  5. }
  6. ?>



  1. <?php
  2. class oAuth_fb {
  3.  
  4. public function getUser() {
  5. // jou code
  6. return json_encode($response);
  7. }
  8. }
  9. ?>


Kleine dummycode die zal moeten werken 

--edit: 'type' toegevoegd aan JS
Offline finduilas - 04/04/2011 13:41
Avatar van finduilas PHP gevorderde Euhm, helaas gaat dit niet. Toch niet zo: Er zou eigenlijk een popup moeten komen en zo aan die access token geraken. Want met die ajax nu gaat ie niet naar facebook (en kan je dus ook geen allow geven..)
Offline ArieMedia - 04/04/2011 13:52 (laatste wijziging 04/04/2011 14:00)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
finduilas schreef:
Euhm, helaas gaat dit niet. Toch niet zo: Er zou eigenlijk een popup moeten komen en zo aan die access token geraken. Want met die ajax nu gaat ie niet naar facebook (en kan je dus ook geen allow geven..)
Dat klopt, want met je ajaxcode roep je jou klasse aan, en je klasse gaat contact zoeken met faceboek..

Wat je krijgt is dit:

Gebruiker laadt site (client)->
Ajax stuurt request naar test.php->
test.php request naar facebook ->
facebook response komt terug in test.php ->
test.php stuurt response naar Ajax (client) ->
Geef info grafisch weer aan gebruiker (client)


--edit

Maar waarom moeilijk gaan doen met eigen code, als ik je een perfect werkende klasse geef..

Het enige wat ik in mijn klasse hoef te doen om een tweet op te halen is

  1. class Twitterklasse {
  2. public function getFollowers() {
  3. $s_Code = $this->request('GET',
  4. $this->url('1/followers/ids', 'json')
  5. );
  6. $a_Followers = json_decode($this->response['response']);
  7. return $a_Followers;
  8. }
  9. }


en via een pagina.php zorg ik ervoor dat hij juiste functies aanroept en de code die ik terugkrijg doorparse in ajax..
Offline finduilas - 04/04/2011 14:18
Avatar van finduilas PHP gevorderde Uhu, Dit kan werken als ik de access token krijg.. Maar hoe verkrijg ik die? Ze moeten explicitiet allowen (op de website van facebook zelf) voor ik die krijg..
Offline ArieMedia - 04/04/2011 14:24 (laatste wijziging 04/04/2011 14:26)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
finduilas schreef:
Uhu, Dit kan werken als ik de access token krijg.. Maar hoe verkrijg ik die? Ze moeten explicitiet allowen (op de website van facebook zelf) voor ik die krijg..
http://developers.facebook.com/docs/guides/web/#login

Key's aanvragen..

Weet overigens niet of de gegeven klasse 100% werkt, aangezien die gemaakt is voor oAuth 1, en FB werkt met 2 (lees ik), maar testen kan nooit kwaad.

https://github.com/facebook/php-sdk/ Geschreven lib door FB is zo te zien ook aanwezig 
Offline finduilas - 04/04/2011 14:52
Avatar van finduilas PHP gevorderde Bedankt alvast voor je help; maar het helpt niet.. Ik zal het dus eens duidelijker uitleggen..

FB kan je benaderen op 2 manieren verschillend wat je nodig hebt:
Volgens FB documentatie:
Citaat:
To get additional information about a user, you must first get their permission. At a high level, you need to get an access token for the Facebook user. After you obtain the access token for the user, you can perform authorized requests on behalf of that user by including the access token in your Graph API requests:


Gegevens opvragen op FB lukt me dus, maar ik heb dat stapje hoger nodig. Daarvoor heb ik dus die access token nodig. Het lukte me half; maar dat is dan zonder javascript (en binnen de pagina enz).

Ik wil dus dat het gebeurt qua werkwijze op de eenvoudige manier, popup dus (waar er inderdaad voorbeelden van bestaan) maar dan dat ik die access token verkrijg. En dat blijft me probleem . Tot op heden is het me enkel gelukt om de werkwijze goed te krijgen (zonder de access token) oftewel de access token zonder de goeie flow.

(btw; de keys enz heb ik dus ook..)
Offline ArieMedia - 04/04/2011 15:14 (laatste wijziging 04/04/2011 15:14)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Dus als ik het nu goed begrijp..

Wil je de consumer key en consumer secret binnenkrijgen via een popup als de gebruiker (consumer) nog geen toegang heeft binnenkrijgen 
Offline finduilas - 04/04/2011 15:37
Avatar van finduilas PHP gevorderde Nee,

De gebruiker moet een account hebben op FB voor hij dat gedeelte van mijn website kan bekijken.

1. De gebruiker komt op me website
2. Er komt een popup voor login (van die gebruiker) met FB (met ook mijn appId, appSecret meegegeven) en de aanvraag tot toelating van bepaalde handelingen..
3. De gebruiker logt in & geeft dus de toelating voor mijn applicatie(popup sluit/of mag gesloten worden)
4. Ik verkrijg in mijn website de access token voor mijn applicatie.
5. Ik haal de gegevens op van FB die ik nodig heb.
Offline ArieMedia - 04/04/2011 16:24
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
finduilas schreef:
Nee,

De gebruiker moet een account hebben op FB voor hij dat gedeelte van mijn website kan bekijken.

1. De gebruiker komt op me website
2. Er komt een popup voor login (van die gebruiker) met FB (met ook mijn appId, appSecret meegegeven) en de aanvraag tot toelating van bepaalde handelingen..
3. De gebruiker logt in & geeft dus de toelating voor mijn applicatie(popup sluit/of mag gesloten worden)
4. Ik verkrijg in mijn website de access token voor mijn applicatie.
5. Ik haal de gegevens op van FB die ik nodig heb.

Dat is dus de consumer_key en consumer_secret die je op wil halen .

Maar ik weet 1,2,3 niet de oplossing hier voor, maar het lijkt mij logisch dat dit wel ergens op de site vermeld staat.

Ik kan je op dit moment dus helaas niet verder helpen met dit 
Offline finduilas - 04/04/2011 19:29
Avatar van finduilas PHP gevorderde Hmmz;

Ik ben nogmaals even volledig zelf aan het proberen; stap per stap. Ik zit al iets dichter bij mijn eindresultaat. Helaas zit ik even vast met het volgende, en ik denk dat je daar wel even mee kan helpen:

Ik kan nu access token ophalen via een popup. Ik krijg een unloadcallback als het venster wordt gesloten. Helaas moet ik dan die session ophalen die net werd aangemaakt. Nu dat ik dat wil doen zonder te refreshen heb ik een ajaxcall nodig..

Het aan te roepen bestand met ajax (test.php). Het enige wat hij dus moet doen is de sessionwaarde returnen..
  1. <?php
  2. return $_SESSION['code'];
  3. ?>


Unloadcallback wordt aangeroepen wanneer het venster sluit..
  1. function unloadcallback(){
  2. $.ajax({
  3. url: "test.php",
  4. type: 'GET',
  5. dataType: 'json',
  6. success: function(resp){
  7. $('#fb').html(resp);
  8. }
  9. });
  10. };


Hij komt wel in unloadcallback maar hij komt niet in de success. (ook al geprobeerd met alert()..)
Wat en hoe komt dit?
Offline Joost - 04/04/2011 19:45
Avatar van Joost PHP expert Je moet je waarde van $_SESSION['code'] echo-en in plaats van returnen.
Offline finduilas - 04/04/2011 19:54 (laatste wijziging 04/04/2011 19:56)
Avatar van finduilas PHP gevorderde Als ik echo doet hij nog steeds niets..

EDIT, werkt voorlopig:
  1. $.ajax({
  2. url: "test.php",
  3. success: function(data){
  4. alert(data);
  5. }
  6. });
Offline ArieMedia - 05/04/2011 08:56 (laatste wijziging 05/04/2011 08:58)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Als je Json terugvraagt, krijg je een array terug.

jQuery decode de json al voor jou, dus dat is al mooi meegenomen.
het enige wat jij nog moet doen is data['element'] doen, waarvoor element staat voor de array_key 'element'.

Je kan ook een simpele testcase uitvoeren en daarop verder werken (iets wat ik ook doe als ik er niet helemaal uit kom).

Ik hoop dat je bekend bent met klasses, want daarin is het nog gemakkelijker te testen

fbapi.php
  1. class FacebookAPI {
  2.  
  3. private $consumer_key, $consumer_secret, $oauth_key, $oauth_secret;
  4.  
  5. public function __construct() {
  6.  
  7. }
  8.  
  9. public function test() {
  10. $a_TestJson = array(
  11. 'test' => true,
  12. 'dag' => date('d-m-Y', time()),
  13. 'txt' => 'Hallo Json Wereld'
  14. );
  15. return json_encode($a_TestJson);
  16. }
  17. }

index.php


  1. <html>
  2. <head>.....
  3.  
  4. <script type="text/javascript">
  5. $.ajax({
  6. type: "GET",
  7. url: "test.php",
  8. dataType: 'json',
  9. success: function(returndata){
  10. alert('De test op ' + returndata['dag'] ' + is gelukt, daarom zeg ik u + "\n" + returndata['txt']);
  11. }); });
  12. </script>
  13.  
  14. </head>


Als dit werkt kan je vanuit hier verder werken, en steeds meer functionaliteit inbrengen.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.317s