Skip to content

Commit 4815782

Browse files
authored
Merge pull request #107 from vidhantmatta/master
Facebook bday wishes autoreplier added
2 parents 56ae4cf + bbf6251 commit 4815782

File tree

1 file changed

+138
-0
lines changed

1 file changed

+138
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
import sys
2+
from urllib import urlencode
3+
import requests
4+
from urlparse import urlparse, parse_qs
5+
from random import choice
6+
import re
7+
from datetime import datetime, date, time
8+
import calendar
9+
10+
#settings
11+
12+
#your birthday: datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])
13+
bday = datetime(2014, 8, 25, 12, 30, 0)
14+
15+
#access_token: Generate one at https://developers.facebook.com/tools/explorer
16+
access_token = "CAACEdEose0cBAO2yzpGTncORU3gUGZBcwAqj0ZAI5OSF2ZC2IBOh3LJa23Xso62tih2ZB74vOq4UF6YyDf3ktpoxQRWbrKZAd16OZCBaZAHMpexeklDhBSM4lOdSU9e6syLZA3uZBtbb5ZCQ6pIQx4kZBMZACxrDHKcZBxIIZBuGlnXuQ6SSbZCRw74zZCmbS8CmB9reaUrb4XMr7IZAc7lD2FZC6s6lE3dZBQbZBYmbPz8ZD"
17+
18+
#set true to like posts on your wall
19+
like = False;
20+
21+
#set true to comment thank you
22+
comment = True;
23+
24+
#the list of messages from which you want a random message to be selected
25+
message_set = ['Thank you very much', 'Thanks a lot', 'Thank you!']
26+
27+
#if false, repies to every message. Make it false if you are sure every wish posted on your wall is a birthday message
28+
use_filter = True
29+
30+
#keywords to respond to. Comment only on posts containing at lease one of these words
31+
bdaywords = ["happy", "bday", "b\'day", "birthday","hbd", "wish", "returns", u"cumpleaños".encode("utf-8"),"anniversaire","compleanno","Geburtstag"]
32+
33+
#proxy settings
34+
http_proxy = "https://proxy61.iitd.ernet.in:3128"
35+
http_proxy = "https://proxy61.iitd.ernet.in:3128"
36+
ftp_proxy = "proxy61.iitd.ernet.in:3128"
37+
38+
#do not change anything beyond this line
39+
40+
#calculate utc timestamp
41+
epoch=datetime(1970,1,1)
42+
td = bday - epoch
43+
utc_bday = int((td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 1e6)
44+
45+
#create proxy dictionary
46+
proxy_dict = {
47+
"http" : http_proxy,
48+
"https" : http_proxy,
49+
"ftp" : ftp_proxy
50+
}
51+
52+
#get birthday wishes
53+
def get_posts(url, wishes=None):
54+
#check if we are done
55+
if wishes is None:
56+
wishes = []
57+
stop = False
58+
else:
59+
until = parse_qs(urlparse(url).query).get('until')
60+
stop = int(until[0]) < utc_bday
61+
62+
if stop:
63+
return wishes
64+
else:
65+
print url
66+
req = requests.get(url, proxies=proxy_dict)
67+
if req.status_code == 200:
68+
69+
content = req.json()
70+
71+
#keep only relevant fields from post data
72+
feed = []
73+
for post in content['data']:
74+
feed.append({'id': post['id'],'from': post['from']['name'],'message': post.get('message', ''),'type': post['type']})
75+
76+
#keep only posts relevant to birthday. Make sure you reply your friends who post happy birthday pictures on your timeline or posts in local language
77+
for post in feed:
78+
if post['type']=='status' and is_birthday(post['message'], use_filter) :
79+
wishes.append(post)
80+
81+
next_url = content['paging']['next']
82+
83+
return get_posts(next_url, wishes)
84+
else:
85+
print "Unable to connect. Check if session is still valid"
86+
87+
def confirm(prompt=None, resp=False):
88+
if prompt is None:
89+
prompt = 'Confirm'
90+
if resp:
91+
prompt = '%s [%s]|%s: ' % (prompt, 'y', 'n')
92+
else:
93+
prompt = '%s [%s]|%s: ' % (prompt, 'n', 'y')
94+
while True:
95+
ans = raw_input(prompt)
96+
if not ans:
97+
return resp
98+
if ans not in ['y', 'Y', 'n', 'N']:
99+
print 'please enter y or n.'
100+
continue
101+
if ans == 'y' or ans == 'Y':
102+
return True
103+
if ans == 'n' or ans == 'N':
104+
return False
105+
106+
def is_birthday (message, filter):
107+
if filter == False:
108+
return True
109+
for keyword in bdaywords:
110+
if keyword in message:
111+
return True
112+
return False
113+
114+
if __name__ == '__main__':
115+
116+
#get bithday wishes
117+
base_url = 'https://graph.facebook.com/v2.1/me/feed'
118+
params = {'since': utc_bday, 'access_token': access_token}
119+
url = '%s?%s' % (base_url, urlencode(params))
120+
posts = get_posts(url)
121+
122+
#confirm before posting
123+
usersignal = confirm('Found %s birthday wishes. Ready to thank them?' % (len(posts)))
124+
125+
#post if user said yes
126+
if usersignal is True:
127+
for post in posts:
128+
129+
#thank the user
130+
if comment:
131+
reply = choice(message_set)
132+
print 'Replying %s to %s' % (reply, wish['from'])
133+
url = 'https://graph.facebook.com/%s/comments?access_token=%s' % (wish['id'], access_token)
134+
requests.post(url, data={'message': reply}, proxies=proxy_dict)
135+
136+
if like:
137+
url = 'https://graph.facebook.com/%s/likes?access_token=%s' % (wish['id'], access_token)
138+
requests.post(url, data="", proxies=proxy_dict)

0 commit comments

Comments
 (0)