[PHP] [FACEBOOK] Hoe een FQL query maken met acces_token?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • js303
  • Registratie: April 2003
  • Laatst online: 01-06 10:17
Ben bezig met het PHP coden van een Facebook app, die de "Wall" oftewel stream ophaalt van een Facebook user. Dit doe ik via de FQL api, die via de volgende HTTP aanroep plaatsvindt en in JSON een dataset retourneert:

https://api.facebook.com/method/fql.query?query=...

SQL:
1
2
3
4
5
SELECT post_id, source_id, actor_id, target_id, created_time, updated_time, message, attachment 
FROM stream 
WHERE source_id = '115673245126315' 
AND is_hidden = 0 
LIMIT 0,10


Als ik dit doe zonder 'authenticated' te zijn, krijg ik wel een resulterende stream, echter bepaalde berichten worden niet getoond. Als ik vervolgens deze FQL code wil uitvoeren (let op subquery), krijg ik een melding dat ik niet authorized ben:

SQL:
1
2
3
4
5
6
SELECT post_id, source_id, actor_id, target_id, created_time, updated_time, message, attachment 
FROM stream 
WHERE source_id IN 
(SELECT target_id FROM connection WHERE source_id='115673245126315') 
AND is_hidden = 0 
LIMIT 0,10
Requires valid signature
En vanaf hier kom ik er niet uit! Hoe kan ik een geldige signature krijgen? Na wat Googlen (zie hier en hier) wordt duidelijk dat ik een zgn. access_token moet meesturen, bijv:

https://graph.facebook.com/me?access_token=...

Hoe kom ik aan zo'n access token?
Hier staat hoe maar ik snap er de ballen van. Ik zit volgens mij op een verkeerd spoor.
Heb al een developer account bij Facebook, evenals een RPX account voor authenticatie.

Ik ben al uren aan het inlezen en proberen, trek m'n haren uit mijn hoofd.
NB: ik vind het een chaos wat betreft documentatie en Facebook API's voor PHP, zo wordt op de officiele devsite telkens stukjes code getoond die gewoon niet werken met de officiele PHP api.

Heeft iemand ervaring hiermee - het moet toch mogelijk zijn om een authenticated request te doen naar de Facebook api? Kan iemand mij een duwtje in de richting geven? Bvd.

[ Voor 4% gewijzigd door js303 op 26-05-2010 14:34 ]


Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
Ik gok dat je een OAuth access token nodig hebt, oftewel de gebruiker moet via OAuth jouw app toestemming geven om die data op te halen..

Check dit voorbeeld maar eens, zo rond regel 470 :)

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
graag gedaan hoor :)

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • js303
  • Registratie: April 2003
  • Laatst online: 01-06 10:17
Sorry voor het niet eerder reageren. Bedankt voor de feedback.

Ik vertrouwde op de oude REST api en dat werkte tot op heden goed, maar die zijn ze nu weer aan het uitfaseren dus probeer op de Graph API over te stappen om posts van de news feed op te halen.

Echter met laatstgenoemde krijg ik weer geen toegang tot de news feed.
Het is echt een vaag systeem, dat hele facebook authenticatie gebeuren.

1. Ik vraag eerst een access token op in PHP:
https://graph.facebook.co...pe=client_cred&client_id={$appId}&client_secret={$appSecret}

2. Die retourneert een waarde a la:

155367171151018|4GmC_eXUIFSs6SvxeffU-yEgCXw

2. Ik spreek de Graph API aan:

https://graph.facebook.com/{$appId}/home?access_token={$token}

3. Resultaat van Facebook:

code:
1
2
3
4
5
6
Array (
  [error] => Array (
    [type] => Exception
    [message] => You can only access the "home" connection for the current user.
 )
)


Het is ook zo raar ik kan geen normaal voorbeeld van iemand anders vinden die gewoon een serie posts van de News feed ophaalt - in PHP - en deze in diens eigen layout naar HTML rendert. Het lijkt erop dat het essentieel is dat er via de browser een cookie moet lopen om juist de authenticeren.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-10 12:49

Janoz

Moderator Devschuur®

!litemod

Hoe kom je er trouwens bij dat je daar bij stap 2 @appId in moet vullen? Als ik kijk naar de opbouw van die url dan staat daar nergens appId. Op die plek staat de ID van het object dat je terug wilt krijgen (in dit geval zal daar dus de user moeten staan). De foutmelding is dan ook redelijk logisch. Je bent het home scherm aan het ophalen van een object op Facebook dat toevallig hetzelfde ID heeft als je app. En daar heb je zeer waarschijnlijk geen toegang toe (zoals ook uit de foutmelding blijkt)

Maar als die beide beschrijvingen van de Facebook API te ingewikkeld zijn, is het dan niet handiger om gewoon op zoek te gaan naar een kant en klare implementatie van de Facebook API in php?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • js303
  • Registratie: April 2003
  • Laatst online: 01-06 10:17
@Janoz dat was een foutje bij punt 2, dat had de source ID moeten zijn (van de user). ik had die bij wijze van grap veranderd om te testen (pretty desperate en gefrustreerd), en die code gekopieerd. Echter ook gebruikmakend van de source ID geeft dezelfde foutmelding.

Dus: https://graph.facebook.com/{$sourceId}/home?access_token={$token} geeft diezelfde foutmelding.

Als ik het goed begrijp, wil facebook een access-token ontvangen die ook een actieve session bevat.
De access token die ik ontvang bestaat uit 2 delen (door een | gescheiden) terwijl ik een token uit 3 delen moet ontvangen. Zoals ook hier staat omschreven: http://benbiddington.word...pi-getting-access-tokens/
In some cases, like when using 3.7.1. Client Credentials Flow, you’re issued a token with a missing session part.

Instead of this:

116122545078207|
2.1vGZASUSFMHeMVgQ_9P60Q__.3600.1272535200-500880518|
EyWJJYqrdgQgV1bfueck320z7MM.

you get this:

116122545078207|EyWJJYqrdgQgV1bfueck320z7MM.

These do work in some cases, but are rejected by some resources, for example:

https://graph.facebook.com/me?access_token=116122545078207|EyWJJYqrdgQgV1bfueck320z7MM.

returns error:

{
"error": {
"type": "QueryParseException",
"message": "An active access token must be used to query information about the current user."
}
}
Maar om die token incl active session te ontvangen, daar gaat het bij mij mis. Enfin misschien ben ik er te simpelminded voor... maar ik wil gewoon de Facebook posts in PHP ontvangen en die renderen zoals ik 't wil, niet zoals Facebook mij dicteert.


Hier een link van enkele andere personen die hetzelfde proberen:
http://stackoverflow.com/...nnection-for-current-user

[ Voor 5% gewijzigd door js303 op 20-06-2011 17:03 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-10 12:49

Janoz

Moderator Devschuur®

!litemod

Volgens mij klopt je verklaring niet helemaal. Het gaat fout omdat je een token hebt dat niet genoeg rechten heeft. Het token dat jij hebt mag volgens mij alleen maar gegevens van de current user opvragen (zoals de foutmelding ook aangeeft). Probeer je request nog maar eens, maar vul dan eens 'me' in ipv een gebruikers ID.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Die REST-api zijn ze al bijna een jaar aan het uitfaseren volgens mij dus je loopt wel iets achter ;) Volgens mij moet je gewoon beter de documentatie lezen. Ik zou me niet zo vasthouden aan blogs met artikelen van een jaar geleden, Facebook gaat snel verder en oude oplossingen werken niet altijd meer.

Acties:
  • 0 Henk 'm!

  • js303
  • Registratie: April 2003
  • Laatst online: 01-06 10:17
@Janoz ja als ik 'me' gebruik, dan krijg ik idd een andere foutmelding, namelijk:
An active access token must be used to query information about the current user
Dat zal dan komen omdat mijn access token het session component mist (die ik via openauth zou moeten opvragen).

@Cartman van de REST api ben ik ook wel achter, aangezien mijn originele topicstart al van langer dan een jaar terug is, de REST api toen nog wel actueel was. Tot op heden werkte dat prima via die API en heb ik er niet naar hoeven omkijken.

De 'facebook wall' komt nu pas weer in beeld door een aanpassing die ik wil doen. en met het oog op de toekomst (ok, voor hoe lang is de vraag) dan maar gelijk via hun nieuwe Graph API. De 2e link die ik had gepost van stackoverflow is van vorige maand dus vrij actueel. Ik heb ook de laatste facebook API 3.01 dus probeer echt wel up2date te blijven.. maar d'r zijn wat fundamentele zaken van de hele API die ik gewoon niet snap met dat hele authenticatie gebeuren.

Het lijkt wel of FB de architectuur van hun Graph API zo heeft gemaakt dat een user X die mijn site Y wil bezoeken, zelf eerst ingelogd moet zijn op FB, om uberhaupt mijn Facebook Wall te kunnen zien (die ik dus serverside via PHP wil ophalen). En dat wil ik nu net niet - ik wil zelf bepalen aan wie ik mijn wall laat zien, ook aan users die geen FB hebben of niet zijn ingelogd.

[ Voor 8% gewijzigd door js303 op 20-06-2011 22:42 ]


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 00:38

Ventieldopje

I'm not your pal, mate!

Heeft dat niet gewoon met de privacy instellingen van je facebook account te maken? Dit zie je ook bij twitter accounts die niet publiekelijk zijn :)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • js303
  • Registratie: April 2003
  • Laatst online: 01-06 10:17
@Janoz: terugkomend op waarom ik de source ID (user ID) van de user had opgegeven in plaats van me als in https://graph.facebook.com/me/home?access_token=... - had ik gebaseerd op de info van Facebook zelf, dus niet out of the blue:
Every object in the social graph has a unique ID. You can access the properties of an object by requesting https://graph.facebook.com/ID. For example, the official page for the Facebook Platform has id 19292868552, so you can fetch the object at https://graph.facebook.com/19292868552

...

We support different connection types for different objects. For example, you can get the list of all the people attending the Facebook Developer Garage at SXSW (ID #331218348435) by fetching https://graph.facebook.co...tending?access_token=....
Bron: http://developers.facebook.com/docs/reference/api/

Wat ik dus had gedaan is eerst van deze ID een access-token opvragen en vervolgens van diezelfde user de news feed opvragen:

Get access token: https://graph.facebook.co...pe=client_cred&client_id=XXXX&client_secret=YYYY
Retourneert: 155367171151018|4GmC_eXUIFSs6SvxeffU-yEgCXw

Get news feed: https://graph.facebook.com/XXXX/home?access_token=155367171151018|4GmC_eXUIFSs6SvxeffU-yEgCXw

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-10 12:49

Janoz

Moderator Devschuur®

!litemod

js303 schreef op maandag 20 juni 2011 @ 23:38:
@Janoz: terugkomend op waarom ik de source ID (user ID) van de user had opgegeven in plaats van me als in https://graph.facebook.com/me/home?access_token=... - had ik gebaseerd op de info van Facebook zelf, dus niet out of the blue:
Je had er geen sourceID staan, maar je appID. Eigenlijk gaf ik 2 dingen aan:
- Daar moet niet het id van je app staan, maar van de bron waar je je informatie wilt hebben
- De foutmelding geeft aan dat je alleen maar recht hebt om van de current user informatie op te vragen, je mag dus alleen 'me' gebruiken.

Ik snap de verwarring aangezien ik in mijn bericht het eerste constateerde en het tweede concludeerde.
Bron: http://developers.facebook.com/docs/reference/api/

Wat ik dus had gedaan is eerst van deze ID een access-token opvragen en vervolgens van diezelfde user de news feed opvragen:

Get access token: https://graph.facebook.co...pe=client_cred&client_id=XXXX&client_secret=YYYY
Retourneert: 155367171151018|4GmC_eXUIFSs6SvxeffU-yEgCXw

Get news feed: https://graph.facebook.com/XXXX/home?access_token=155367171151018|4GmC_eXUIFSs6SvxeffU-yEgCXw
Ah, ik zie nu wat je probeert te doen. Je gebruikt de App login. Die heeft standaard GEEN rechten op gegevens van gebruikers. Die zul je eerst moeten geven. Heeft een app eigenlijk wel een home? Ik zie bij het voorbeeld eigenlijk alleen maar een insight.


Even doorgezocht, een app heeft inderdaad geen home : http://developers.faceboo...eference/api/application/

[ Voor 3% gewijzigd door Janoz op 21-06-2011 09:22 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1