Facebook Graph API vraag
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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);
?>
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
Code (php)
1
2
3
4
5
6
7
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)
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.
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
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
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
Ik heb nu wel een goede query gemaakt en krijg een response terug in onderstaand formaat als ik deze url invul.
:
Code (php)
1
https://graph.facebook.com/fql?q=select eid,pic_cover,name,description,start_time from event where eid = '681462541906802'&access_token=********
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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"
}
]
}
"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)
1
2
3
4
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;
?>
$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
Gewijzigd op 24/07/2014 21:46:29 door Frank Nietbelangrijk
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
?>
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)
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
Maar je moet wel even je query door urlencode() halen!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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);
?>
$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);
?>
mmm die urlencode werkt vooralsnog niet. Hij zet overal plusjes neer waar %20 hoort waardoor de query volgens mij fout gaat
Gewijzigd op 24/07/2014 22:51:37 door Frank Nietbelangrijk
Heb ik hieronder iets fout misschien?
Code (php)
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.'');
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
{
"error": {
"message": "(#601) Parser error: unexpected end of query.",
"type": "OAuthException",
"code": 601
}
}
"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
heb hem thanks!
super!