Here is a code for monitoring Facebook fanpage posts (not necessarily yours) using Graph API.
APP_SECRET and APP_ID must be from an app created with your Facebook developer account, like in the image below:
And asign company variable to a Facebook fanpage name, for example: socialcuy.
Hope you find it useful.
APP_SECRET and APP_ID must be from an app created with your Facebook developer account, like in the image below:
And asign company variable to a Facebook fanpage name, for example: socialcuy.
Hope you find it useful.
import urllib2
import json
import pyaudio
import wave
import webbrowser
def create_posts_url(graph_url, APP_ID, APP_SECRET):
#create authenticated post URL
post_args = "/posts/?key=value&access_token=" + APP_ID + "|" + APP_SECRET
posts_url = graph_url + post_args
return posts_url
def render_to_json(graph_url):
#render graph url call to JSON
try:
web_response = urllib2.urlopen(graph_url)
readable_page = web_response.read()
json_data = json.loads(readable_page)
return json_data
except:
render_to_json(graph_url)
def get_likes_count(post_id, APP_ID, APP_SECRET):
count_likes = 0
try:
#create Graph API Call
graph_url = "https://graph.facebook.com/"
likes_args = post_id + "/likes?summary=true&key=value&access_token" + APP_ID + "|" + APP_SECRET
likes_url = graph_url + likes_args
likes_json = render_to_json(likes_url)
#pick out the likes count
count_likes = likes_json["summary"]["total_count"]
except:
pass
return count_likes
def get_value(post, keys):
try:
if type(keys) in (tuple, list):
postvalue = post
for key in keys:
postvalue = postvalue[key]
return postvalue
else:
return post[keys]
except:
pass
return ""
def play_audio(path):
chunk = 1024
wf = wave.open(path, 'rb')
p = pyaudio.PyAudio()
stream = p.open(
format = p.get_format_from_width(wf.getsampwidth()),
channels = wf.getnchannels(),
rate = wf.getframerate(),
output = True)
data = wf.readframes(chunk)
while data != '':
stream.write(data)
data = wf.readframes(chunk)
stream.close()
p.terminate()
# array containing post ids already seen
posts_ids = []
def main():
#simple data pull App Secret and App ID
APP_SECRET = "YOUR APP_SECRET"
APP_ID = "YOUR APP_ID"
#to find go to page's FB page, at the end of URL find username
#e.g. http://facebook.com/Wereverwero, Wereverwero is the username
company = "socialcuy"
graph_url = "https://graph.facebook.com/"
#make graph api url with company username
current_page = graph_url + company
while True:
#extract post data
posts_url = create_posts_url(current_page, APP_ID, APP_SECRET)
json_postdata = render_to_json(posts_url)
try:
json_fbposts = json_postdata['data']
except:
continue
post = json_fbposts[0] #last post
post_id = get_value(post, "id")
if post_id in posts_ids:
print "waiting for new post ........................................."
continue
posts_ids.append(post_id)
print "NEW POST ******************************************"
# if it was recently created then some of these may be empty
post_created_time = get_value(post, "created_time")
post_message = get_value(post, "message")
post_likes_count = get_likes_count(post["id"], APP_ID, APP_SECRET)
post_link = get_value(post, "link")
post_name = get_value(post, "name")
post_description = get_value(post, "description")
post_shares_count = get_value(post, ["shares", "count"])
print "post_id = " + str(post_id)
print "post_created_time = " + post_created_time
print "post_message = " + post_message
print "# likes = " + str(post_likes_count)
print "post_link = " + post_link
print "post_name = " + post_name
print "post_description = " + post_description
print "post_shares_count = " + str(post_shares_count)
# open post url on default browser
s_post_id = str(post_id)
s_post_id = s_post_id[s_post_id.index('_') + 1:]
webbrowser.open("https://www.facebook.com/" + company + "/posts/" + s_post_id)
# play audio and wait till it finishes
play_audio("alert.wav")
if __name__ == "__main__":
main()
It's based on a source code written by @SimpleBeauData, he's also a data science aspirant.
