Facebook Graph API vraag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

N K

N K

22/07/2014 21:13:21
Quote Anchor link
Voor mijn site wil ik events binnenhalen via de Facebook Graph Api. Ik ben er nu echt te lang mee bezig en vraag me af of iemand op dit forum ervaring met deze api heeft.
De Graph Api documentatie vind ik niet heel erg duidelijk maar het kan aan mij liggen..

Ik wil handmatig een lijst maken met facebook venue(id's) en die d.m.v. FQL (is deprecated maar weet niet hoe ik het anders moet doen..) periodiek specifieke eventinformatie binnenhalen die betrekking hebben op deze venues.

Tot dusver heb ik onderstaande maar ik krijg een error:
Fatal error: Uncaught Exception: Your statement is not indexable. The WHERE clause must contain an indexable column. Such columns are marked with * in the tables linked from http://developers.facebook.com/docs/reference/fql thrown in lib\facebook-php-sdk-master\src\base_facebook.php on line 1325

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

include_once '../lib/facebook-php-sdk-master/src/facebook.php';
 
$facebook = new Facebook(array(
    'appId' => '********',
    'secret' => '***********',
    'cookie' => true
));


$params = array(
    'method' => 'fql.query',
    'query' => "select eid,name,description,start_time from event where eid in (SELECT eid FROM event WHERE venue.id = '317872058360227') and start_time > now() order by start_time ASC"
    );
$result = $facebook->api($params);
print_r($result);

?>
Gewijzigd op 22/07/2014 21:39:05 door N K
 
PHP hulp

PHP hulp

18/06/2024 11:17:02
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/07/2014 21:49:23
Quote Anchor link
In normale SQL zou dit een belachelijke query zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT eid,name,description,start_time
FROM event
WHERE eid IN
    (SELECT eid
     FROM event
     WHERE venue.id = '1445023055765319') and start_time > now()
     ORDER BY start_time ASC)

Wat houdt je tegen om de where clause uit de subquery in de hoofdquery te zetten.

Ik weet niet of dit je probleem zal oplossen, maar ik zou sowieso niet gaan programmeren op iets wat depracated is.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/07/2014 21:57:36
Quote Anchor link
De foutmelding spreekt boekdelen. er zit een link in naar de documentatie. Wat wil je nog meer zou ik zo zeggen.

Het komt hier op neer:
- Alleen geïndexeerde kolommen mogen gebruikt worden in het WHERE gedeelte.
- In de documentatie staat een vergrootglas achter de kolommen die geïndexeerd zijn.
- start_time is een kolom die NIET geïndexeerd is en mag dus ook NIET gebruikt worden in het WHERE gedeelte,
evenmin als venue.id als ik het goed heb mag venue.name WEL gebruikt worden.
Gewijzigd op 22/07/2014 21:58:33 door Frank Nietbelangrijk
 
N K

N K

22/07/2014 22:01:06
Quote Anchor link
Ik snap die hele tabellenstructuur niet van facebook.
Zie https://developers.facebook.com/docs/reference/fql/event/

Is de kolom "venue" in deze lijst nu een tabel of een kolom? Als ik erop klik komen er meer velden tevoorschijn. Lijkt me dus een tabel maar facebook noemt het een kolom?



Toevoeging op 22/07/2014 22:07:23:

P.s. Ik dacht dat een index uniek moest zijn. Hoe kan venue.name nu uniek zijn?

Toevoeging op 22/07/2014 22:13:44:

Ik heb nu deze query maar hij geeft nog steeds dezelfde foutmelding

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT eid,name,description,start_time
FROM event
WHERE venue.name = 'Champ-Aubert'


Toevoeging op 23/07/2014 20:23:22:

Iemand?

Toevoeging op 23/07/2014 21:03:18:

Okee, API is gewoon ruk
http://stackoverflow.com/questions/22368629/facebook-fql-find-all-events-that-take-place-at-a-certain-venue
 
N K

N K

24/07/2014 21:11:25
Quote Anchor link
Nou, ik heb het via de PHP SDK geprobeerd maar dit wil ook niet lukken.

Ik heb nu wel een goede query gemaakt en krijg een response terug in onderstaand formaat als ik deze url invul.
:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
https://graph.facebook.com/fql?q=select eid,pic_cover,name,description,start_time from event where eid = '681462541906802'&access_token=********


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
   "data": [
      {
         "eid": 681462541906802,
         "pic_cover": {
            "cover_id": "10153014759374778",
            "source": "https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-xpa1/v/t1.0-9/q71/s720x720/10384018_10153014759374778_9161439485140597017_n.jpg?oh=13983917e120738af1605fbc026406cd&oe=5441E5D1&__gda__=1412984919_433b0108c9f4cba158f5d7ad80e56511",
            "offset_y": 0,
            "offset_x": 12
         },
         "name": "Muziekzomer: NJO Blazersensemble 'Shake Well' o.l.v. Hans Leenders.",
         "description": "Van A(ndriessen) Tot Z(uidam) \n\n\u2018Ein genialischer Hund\u2019, zo werd Robert Zuidam door een criticus van Der Spiegel getypeerd. En dat geniale laat het NJO ruimschoots horen in dit programma.We horen de musici in verschillende samenstellingen. Het blazersensemble zet de toon met Shake well before use. Vervolgens hebben fluit en piano het rijk alleen in Four movements for flute and piano, dat Zuidam schreef voor Abbie de Quant en Elizabeth van Malde. Dat Zuidam ook wat met jong talent heeft blijkt uit het stuk Easy Meat, dat hij in 1996 voor slechts vijf gulden schreef voor een neefje van hem. Toen Zuidam aan het gerenommeerde Tanglewood in de Verenigde Staten bij Lukas Foss en Oliver Knussen studeerde schreef hij de basis voor zijn Three Mechanisms. De aanvankelijke compositie, Fishbone, werd onderscheiden met de Koussevitzky Composition Prize. Na de premi\u00e8re breidde hij de compositie met twee delen uit en bracht verschillende wijzigingen aan. Het stuk begint met een \u2018wall of sound\u2019 (typisch voor Zuidam in deze periode), waardoor de aandacht van het publiek meteen gegrepen wordt. Het NJO Blazersensemble maakt in dit programma een klein uitstapje naar Louis Andriessen, die andere grote Nederlandse componist. Van hem staat On Jimmy Yancey op het programma, vernoemd naar een van de pioniers van de boogiewoogie en heel geschikt voor het swingende NJO Blazersensemble onder leiding van Hans Leenders. \n \nProgramma:\nZuidam - Shake well before use\nZuidam - Four movements for flute and piano\nAndriessen - On Jimmy Yancey",
         "start_time": "2014-08-02T20:30:00+0200"
      }
   ]
}

Nu wil ik deze data verwerken in een database maar krijg de data niet te pakken.

ik heb het geprobeerd met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$data
= file_get_contents('https://graph.facebook.com/fql?q=select eid,pic_cover,name,description,start_time from event where eid = "681462541906802"&access_token=******');
echo $data;
?>

..Maar dan krijg ik de fout:
failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in ....

Weet iemand hoe ik de data kan verkrijgen?
Gewijzigd op 24/07/2014 21:13:00 door N K
 
Frank Nietbelangrijk

Frank Nietbelangrijk

24/07/2014 21:45:55
Quote Anchor link
file_get_contents werkt niet altijd. in bijzonder niet achter een login en in de POST methode. Wellicht zul je dan met CURL moeten werken. Hierover zou wel iets te lezen moeten zijn in de documentatie. heb je wat linkjes?
Gewijzigd op 24/07/2014 21:46:29 door Frank Nietbelangrijk
 
N K

N K

24/07/2014 21:52:12
Quote Anchor link
CURL werkt ook niet.. (Althans als mijn code goed is)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function geturl($url, $params) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params, null, '&'));
    $ret = curl_exec($ch);
    curl_close($ch);
    return $ret;
}


$url = 'https://graph.facebook.com/fql?q=select eid,pic_cover,name,description,start_time from event where eid =681462541906802';
$params = array('access_token' => '********'); //wel ingevuld uiteraard..
$graph_ret = geturl($url, $params);

print_r($graph_ret);
?>


link
https://developers.facebook.com/docs/graph-api




Toevoeging op 24/07/2014 22:12:35:

Aha lag aan de url!
Als ik dit invul werkt het wel i.c.m. file get contents:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
https://graph.facebook.com/fql?q=select%20eid,pic_cover,name,description,start_time%20from%20event%20where%20eid%20=%20%22681462541906802%22&access_token=******

Urlencode werkt daarentegen dan weer niet..Even kijken waarom dat dan niet gaat...
Gewijzigd op 24/07/2014 22:24:03 door N K
 
Frank Nietbelangrijk

Frank Nietbelangrijk

24/07/2014 22:28:00
Quote Anchor link
Laat het nu lekker wel kunnen met file_get_contents() :-)

Maar je moet wel even je query door urlencode() halen!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$access_token
= 'joueigencode';

    $graph_url= 'https://graph.facebook.com/fql?q='.urlencode('select eid,pic_cover,name,description,start_time from event where eid = "681462541906802"').'&access_token=' . $access_token;

        
$jsonurl = $graph_url;
$json = file_get_contents($jsonurl,0,null,null);
$json_output = json_decode($json);

echo '<pre>';
print_r($json_output);
?>
 
N K

N K

24/07/2014 22:45:53
Quote Anchor link
mmm die urlencode werkt vooralsnog niet. Hij zet overal plusjes neer waar %20 hoort waardoor de query volgens mij fout gaat
 
Frank Nietbelangrijk

Frank Nietbelangrijk

24/07/2014 22:50:05
Quote Anchor link
Ik heb het getest en bij mij werkt het wel.
Gewijzigd op 24/07/2014 22:51:37 door Frank Nietbelangrijk
 
N K

N K

24/07/2014 22:54:43
Quote Anchor link
Had net als voorbeeld een wat kleinere query gebruikt.
Heb ik hieronder iets fout misschien?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$graph_url= 'https://graph.facebook.com/fql?q='.rawurlencode('SELECT eid,pic_cover,name,description,start_time FROM event WHERE eid IN (SELECT eid FROM event WHERE contains("'.$name.'") and venue.id = '.$venue_id.')and start_time > now() order by start_time ASC &access_token=' . $access_token.'');
 
Frank Nietbelangrijk

Frank Nietbelangrijk

24/07/2014 23:00:13
Quote Anchor link
de url even in de browser geplakt geeft:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
{
   "error": {
      "message": "(#601) Parser error: unexpected end of query.",
      "type": "OAuthException",
      "code": 601
   }
}


Toevoeging op 24/07/2014 23:03:10:

Het is een ) te weinig volgens mij
 
N K

N K

24/07/2014 23:15:52
Quote Anchor link
heb hem thanks!
 
Frank Nietbelangrijk

Frank Nietbelangrijk

24/07/2014 23:27:30
Quote Anchor link
super!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.