I know a way to get the attachments by Graph API. But this can only get 12 items back. I don't see an edge like "next page" in the JSON, how should I do this?
In my case,
/{page-id}/feed/?fields=message,attachments{subattachments.limit(30)}
Here, 30 is big enough for limit. (Maybe default limit is 12.)
Related
how can i extract name list && phone numbers of the users liking certain page ?
I have tried using software called facepager but i couldn't extract names .
note:I'm not the owner of the page
You'd most likely have to write code yourself to do something like this. However,
Almost no-one publicly shares their phone number.
Facebook try to prevent this kind of data collection.
Even when facebook list's "likers" of a page, it'll wait till you scroll down to load more. You'd have to play with your browsers debug tools and look into where it get's that data from
https://www.facebook.com/search/<group id here>/likers
In the end you'll probably not get much better than just searching for the page and clicking each person's profile because the site is designed to not let what you're trying to do happen...
Im trying to read the facebook posts from our wall and we decided we dont want all of the posts, we just want some of them. So basicly our idea was to add a special keyword (for example: "#keyword") to each post, and then simply search for all posts that contains the keyword. I dont know if theres a smarter solution, if there is any let me know :)
What i used before:
https://graph.facebook.com/<OurID>/posts?limit=15&access_token=<privateToken>
Now i found a way to get that what i want, but its using the FQL:
SELECT message
FROM stream
WHERE source_id = <ourID>
AND strpos(lower(message), "#keyword") >= 0;
I heard that the FQL is going to be removed soon. So is there a way to convert this FQL into the Facebook graph API?
As solution i just gather all the data and filter them by myself via CRON-Job.
Let's say I want to search for McDonalds in a certain location using Facebook's graph API, like so. Now, since I know that Facebook won't always give me back all the results I want on the first page, or even the number of results I asked for, I follow the pagination link. This is the one I was given. Now, this second page loses the query string, and returns a bunch of results near the search location, but having nothing at all to do with McDonalds (e.g. Tufenkian Artisan Carpets Chicago). How can I tell when I have no more applicable results, if the pagination drops my original query entirely?
It looks like removing the limit parameter causes pagination to correctly have the query on future pages: see the same search without the limit parameter.
Say I have a website that has 100 products. Then this is filtered down to 5 sections containing 20 products each. If you were in one of the sections that contained 20 products (e.g. toys), what would be the optimal method to display only 5 toys per page. At the bottom of the list would be next/previous buttons to show the next/previous set of 5 toys.
A better analogy would be google search. There are millions of results but only ~10 are shown at a given time.
So right now I'm using google app engine (python) and django templates. One way I thought of to remedy this problem would be making all the query results go into a div which could then be modified through javascript to give a similar effect. However, if someone were to click their browser's back button, they wouldn't go where they originally came from.
Thanks in advance. Any help would be useful...I don't know what this technique is called so google hasn't been really useful :(
Edit: based on responses, I found my question was solved here: How to use cursor() for pagination?
Look into query cursors. Thay are made to be serialized and sent to client, to be used in creating "next" and "previous" paging requests.
NOTE: don't use offset on queries. This can be VERY expensive, as it actually fetches (and charges) all entities up to offset+limit position, but returns to application only limit results.
I'm not sure that putting all the results as hidden content in the HTML and manipulating it using JS is a very good idea if you might have a large result set (think about what happened if Google used this approach). There's also the back functionality issue that you've mentioned.
So, as for querying a wanted "results page" each time, I think the Google's GQL Reference might help you, take a look specifically at the LIMIT clause, it can help you create the paging mechanism you're looking for by supplying it with the number of items-per-page you want as "count" and the numbers of items-previously-viewed as "offset" (0 at first call).
As for displaying, I think that the Google Images / Facebook News Feed approach might also be interesting to think about (loading on scroll instead of paging), but that's a matter of your personal choice :)
Hope this helps, good luck!
EDIT: After reading Peter's answer, I found it much more efficient to use cursors for pagination, a good reference is given in his answer.
I am writing an application that needs to retrieve all posts on any given facebook page. For the McDonald's page, I would use this url:
https://graph.facebook.com/McDonalds/posts?access_token=xxx&limit=5000
The problem is that first, I do not receive any posts older than 2011-11-01 and the number of posts shown is much less than 5000. This means that the limit parameter isn't working properly. I looked this up and found that it was a known bug.
Then I tried to follow the next and previous paging information provided in the end and even using that I can't get past 2011-01-24. After following the next link 2 times, an empty page comes up. The McDonalds page is much older and contains more posts. So the question is, how on earth am I supposed to retrieve older posts. Is there any workaround at all?
There is a limit on the limit. Try using since & until to extend the date params
https://graph.facebook.com/McDonalds/posts?access_token=xxx&limit=5000&since=2+years+ago&until=now
&limit=5000&since=2+years+ago&until=now
&limit=5000&since=3+years+ago&until=now