Thursday 29 May 2014

Using Facebook Graph Search in Python for extracting Page Feeds

In this example I am using Facebook Python SDK.
Download the zip file and install it to your system.

For using Facebook Graph API you need Access Token.
Facebook provides both short-term (expires in around 100 minutes) and long-term tokens (60 days).
   
You can get a temporary access token from Facebook Explorer (Don't Hesitate in taking all permissions :P)
You can check the status of the access token by clicking on the Debug Button. 

If you want to take a long-term token then you will have to create an app on Facebook. 
Go to Facebook Developers and then click on App->Create an App. Once you have created an App you will get an App ID and App Secret(Never share it). 
First you will get a short term access token for your app at Access Token Tools.
Now to get your long-term access token go to -

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token& 
    fb_exchange_token=EXISTING_ACCESS_TOKEN   

You will get a new access token that will not expire in next 60 days.

Now to get feeds from a page you need to get its page_id. To get page_id you can just search the source code of the page and you will get it in format -  "type":"ent:page","uid":344128252278047

Code to use Facebook Graph API -

import facebook
graph = facebook.GraphAPI("ACCESS TOKEN")
strr = "/v2.0/"+str(PAGE_ID)+"/feed"
profile = graph.get_object(strr)
print profile

Now profile will give you the data in JSON format
You can just use it as python dictionary and go through all the feeds.
Not all the results are shown on the first page of the results. Instead, Facebook has Pagination to move along all the result pages. 

You can just use profile as python dictionary.
Code to display few details of the feeds -

def fetch_post(data):
            post_id = str(data["id"])
            author_id = "-"
            author_name = "-"
            if("from" in data):
                author_id = str(data["from"]["id"].encode('utf-8', 'replace'))
                author_name = str(data["from"]["name"].encode('utf-8', 'replace'))
            message = "-"
            if("message" in data):
                message = str(data["message"].encode('utf-8', 'replace'))
            name = "-"
            if("name" in data):
                name = str(data["name"].encode('utf-8', 'replace'))
            caption = "-"
            if("caption" in data):
                caption = str(data["caption"].encode('utf-8', 'replace'))
            source = "-"
            if("source" in data):
                source = str(data["source"].encode('utf-8', 'replace'))
            description = "-"
            if("description" in data):
                description = str(data["description"].encode('utf-8', 'replace'))
            link = "-"
            if("link" in data):
                link = str(data["link"].encode('utf-8', 'replace'))
            cr_time = "-"
            if("created_time" in data):
                cr_time = str(data["created_time"].encode('utf-8', 'replace'))
            up_time = "-"
            if("updated_time" in data):
                up_time = str(data["updated_time"].encode('utf-8', 'replace'))
            shares = "0"
            if("shares" in data):
                shares = str(data["shares"]["count"])
            likes = "0"
            if("likes" in data):
                likes = str(len(data["likes"]["data"]))
            print "Post-ID: %s" %(post_id)
            print "Author-ID: %s Author-Name: %s" %(author_id,author_name)
            print "Message: %s" %(message)
            print "Name: %s" %(name)
            print "Caption: %s" %(caption)
            print "Source: %s" %(source)
            print "Description: %s" %(description)
            print "Link: %s" %(link)
            print "Created-Time: %s Updated-Time: %s" %(cr_time,up_time)
            print "Shares: %s" %(shares)
            print "Likes: %s" %(likes)

import facebook
graph = facebook.GraphAPI("ACCESS TOKEN")
strr = "/v2.0/"+str(PAGE_ID)+"/feed"
profile = graph.get_object(strr)

print profile
sz = len(profile["data"])
for x in range(0,sz):
        if("id" in profile["data"][x]):
                details = fetch_post(profile["data"][x])

In this way you can use Facebook Graph API for fetching posts of the Page.

Here's the output of the above program for PAGE_ID - 344128252278047 (Sachin Tendulkar)

Post-ID: 344128252278047_792267827464085
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: Great to meet a former 'India' player and a legend.
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.792251527465715.1073741827.344128252278047/792267740797427/?type=1&relevant_count=1
Created-Time: 2014-05-28T17:32:03+0000 Updated-Time: 2014-05-29T13:21:28+0000
Shares: 1138
Likes: 25
Post-ID: 344128252278047_792251544132380
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: Happy to be invited as the Goodwill Ambassador for the 35th National Games in Kerala.
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.792251527465715.1073741827.344128252278047/792251310799070/?type=1&relevant_count=1
Created-Time: 2014-05-28T16:55:58+0000 Updated-Time: 2014-05-29T13:19:01+0000
Shares: 873
Likes: 25
Post-ID: 344128252278047_792025730821628
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: Just got back from Kerala after a visit regarding our football team in the Indian Super League - Kerala Blasters. The support and enthusiasm of the fans and the leadership was wonderful. The following for the game of football in the state is phenomenal and am sure Kerala Blasters will give all the fans more reason to cheer and further enjoy the beautiful game of  football.
Name: -
Caption: -
Source: -
Description: -
Link: -
Created-Time: 2014-05-28T07:10:11+0000 Updated-Time: 2014-05-29T13:15:57+0000
Shares: 1482
Likes: 25
Post-ID: 344128252278047_791965037494364
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: People used to call me master blaster. I'm supporting Kerala Kochi team. I hope the entire Kerala will be behind our football team. That's why we thought of naming it as Kerala Blasters FC
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/791964920827709/?type=1&relevant_count=1
Created-Time: 2014-05-28T05:21:46+0000 Updated-Time: 2014-05-29T13:21:19+0000
Shares: 6729
Likes: 25
Post-ID: 344128252278047_791463707544497
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: Practice session at the Wankhede Stadium.
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/791463687544499/?type=1&relevant_count=1
Created-Time: 2014-05-27T08:22:05+0000 Updated-Time: 2014-05-29T11:42:08+0000
Shares: 2082
Likes: 25
Post-ID: 344128252278047_790873174270217
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: -
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/790873134270221/?type=1&relevant_count=1
Created-Time: 2014-05-26T06:15:29+0000 Updated-Time: 2014-05-29T11:42:15+0000
Shares: 3814
Likes: 25
Post-ID: 344128252278047_789877277703140
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: -
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/789877204369814/?type=1&relevant_count=1
Created-Time: 2014-05-24T06:27:39+0000 Updated-Time: 2014-05-29T11:42:22+0000
Shares: 4143
Likes: 25
Post-ID: 344128252278047_788296784527856
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: The first match of my career was not that great. I had sleepless nights as I had failed to score. I finally spoke to my seniors and they advised me not to take pressure and be at ease and in control of my game. That helped me score 58 in my next match. I have not forgotten that advice and share it with every youngster I meet.
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/788296561194545/?type=1&relevant_count=1
Created-Time: 2014-05-21T05:53:24+0000 Updated-Time: 2014-05-29T11:42:25+0000
Shares: 2249
Likes: 25
Post-ID: 344128252278047_787300977960770
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: http://bit.ly/1hbHmjn
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/787300941294107/?type=1&relevant_count=1
Created-Time: 2014-05-19T07:39:49+0000 Updated-Time: 2014-05-29T11:42:31+0000
Shares: 3068
Likes: 25
Post-ID: 344128252278047_786249771399224
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: British Commonwealth issues legal tender coins in honor of Sachin. View or pre-order on : www.eicgold.com
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/785889024768632/?type=1&relevant_count=1
Created-Time: 2014-05-17T05:30:00+0000 Updated-Time: 2014-05-29T06:46:33+0000
Shares: 8856
Likes: 25
Post-ID: 344128252278047_785246431499558
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: Memorable Picture
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/785237004833834/?type=1&relevant_count=1
Created-Time: 2014-05-15T05:49:20+0000 Updated-Time: 2014-05-29T11:04:28+0000
Shares: 40945
Likes: 25
Post-ID: 344128252278047_783730588317809
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: Happy Buddha Purnima.
Name: -
Caption: -
Source: -
Description: -
Link: -
Created-Time: 2014-05-14T04:00:00+0000 Updated-Time: 2014-05-29T10:26:56+0000
Shares: 722
Likes: 25
Post-ID: 344128252278047_783742051649996
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: It's about not accepting every little challenge thrown at you. Sometimes you hold back and when it's needed you go for it.
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/783738561650345/?type=1&relevant_count=1
Created-Time: 2014-05-12T06:10:17+0000 Updated-Time: 2014-05-29T06:23:06+0000
Shares: 4728
Likes: 25
Post-ID: 344128252278047_782458088445059
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: The match starts much, much earlier than the actual match.
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/782110831813118/?type=1&relevant_count=1
Created-Time: 2014-05-10T04:00:00+0000 Updated-Time: 2014-05-29T08:34:29+0000
Shares: 1867
Likes: 25
Post-ID: 344128252278047_781472771876924
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: -
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/781472655210269/?type=1&relevant_count=1
Created-Time: 2014-05-08T05:07:38+0000 Updated-Time: 2014-05-29T07:08:59+0000
Shares: 6088
Likes: 25
Post-ID: 344128252278047_781042355253299
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: http://bit.ly/1hbHmjn
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/781042131919988/?type=1&relevant_count=1
Created-Time: 2014-05-07T09:18:25+0000 Updated-Time: 2014-05-29T08:56:12+0000
Shares: 2275
Likes: 25
Post-ID: 344128252278047_780358695321665
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: http://bit.ly/1sevIqw
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/780357431988458/?type=1&relevant_count=1
Created-Time: 2014-05-06T05:30:53+0000 Updated-Time: 2014-05-28T07:33:13+0000
Shares: 5977
Likes: 25
Post-ID: 344128252278047_779887502035451
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: -
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402883266402545.98317.344128252278047/779886642035537/?type=1&relevant_count=1
Created-Time: 2014-05-05T04:39:39+0000 Updated-Time: 2014-05-27T18:33:27+0000
Shares: 874
Likes: 25
Post-ID: 344128252278047_778466455510889
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: Happy Birthday Brian!
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/778466282177573/?type=1&relevant_count=1
Created-Time: 2014-05-02T07:19:25+0000 Updated-Time: 2014-05-29T10:27:46+0000
Shares: 8878
Likes: 25
Post-ID: 344128252278047_777709918919876
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: I always had a dream to play for India but I never let it put pressure on me.
http://bit.ly/1hbHmjn
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/777699385587596/?type=1&relevant_count=1
Created-Time: 2014-05-01T05:30:00+0000 Updated-Time: 2014-05-29T11:13:00+0000
Shares: 4369
Likes: 25
Post-ID: 344128252278047_776701259020742
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: I celebrated the World Wish Day with Rahul Jediya. Rahul is getting treated for a life threatening disease at the Nair Hospital Mumbai. He wished to meet me above all things he could have asked for. I was glad to spend time with him at my house. Thank you Make-A-Wish Foundation for making his wish a reality.
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/776324329058435/?type=1&relevant_count=1
Created-Time: 2014-04-29T03:30:00+0000 Updated-Time: 2014-05-28T15:19:44+0000
Shares: 4836
Likes: 25
Post-ID: 344128252278047_776206965736838
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: SMS "Play" to 51001 or click on http://bit.ly/1pFGUhO to play and win exciting prizes everyday.
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/776206722403529/?type=1&relevant_count=1
Created-Time: 2014-04-28T05:35:20+0000 Updated-Time: 2014-05-25T03:53:55+0000
Shares: 171
Likes: 25
Post-ID: 344128252278047_776197449071123
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: Thank you Sushil Kumar. I would also want to thank everyone for their warm heartfelt wishes. They meant a lot to me. 
Name: Timeline Photos
Caption: Sachin Sir ko Janamdin ki Hardik Shubhkaamnayen. Hum sabke liye aap ek prerna hain.
Source: -
Description: -
Link: https://www.facebook.com/214438055336512/photos/a.230714137042237.49706.214438055336512/577504559029858/?type=1
Created-Time: 2014-04-28T05:06:57+0000 Updated-Time: 2014-05-27T15:29:15+0000
Shares: 211
Likes: 25
Post-ID: 344128252278047_775769199113948
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: http://bit.ly/1hbHmjn
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/775769089113959/?type=1&relevant_count=1
Created-Time: 2014-04-27T11:44:50+0000 Updated-Time: 2014-05-28T11:08:05+0000
Shares: 3602
Likes: 25
Post-ID: 344128252278047_774563225901212
Author-ID: 344128252278047 Author-Name: Sachin Tendulkar
Message: The #WeAreSachin was a fantastic initiative by Toshiba to connect with my fans and a big thanks to everyone for making me a part of this world record. Watch mosaic here: http://bit.ly/sachincollage
Name: -
Caption: -
Source: -
Description: -
Link: https://www.facebook.com/SachinTendulkar/photos/a.402901949734010.98326.344128252278047/774563172567884/?type=1&relevant_count=1
Created-Time: 2014-04-25T04:08:20+0000 Updated-Time: 2014-05-27T05:22:16+0000
Shares: 2739
Likes: 25