# coding: utf-8
# In[1]:
import requests
import datetime, time
class FBAPI():
def __init__(self):
self.base_url = "https://graph.facebook.com/v2.5/"
self.set_since_time()
self.set_until_time()
pass
def login(self, token):
self.token = token
#test login
qs = {"fields":"id,name",
"access_token":self.token}
info = self.make_request("me", qs)
if "id" in info and "name" in info:
print("Your ID : ", info["id"])
print("User Name : ", info["name"])
self.id = info["id"]
self.name = info["name"]
self.is_login = True
else:
print("Login Failed")
def make_request(self, url, qs={}):
x = requests.get(self.base_url+url, params=qs)
response = x.json()
return response
def request(self, url):
x = requests.get(url)
response = x.json()
return response
#"https://graph.facebook.com/v2.5/me/posts"
def get_posts(self):
qs = {"fields":"id, message",
"since":self.since_time,
"until":self.until_time,
"access_token":self.token}
url = "me/posts/"
response = self.make_request(url, qs)
if "data" not in response:
print("Posts Not Found")
return []
posts = response["data"]
while "paging" in response and "next" in response["paging"]:
response = self.request(response["paging"]["next"])
if "data" in response:
posts.extend(response["data"])
print("get ", len(posts), " posts")
posts = list(map(lambda x:x["id"], posts))
return posts
def get_like_from_post(self, Id):
qs = {"fields":"id, likes, message, story",
"access_token":self.token}
response = self.make_request(Id, qs)
likes = []
if "likes" not in response or "data" not in response["likes"]:
print("Likes Not Found")
return likes
message = ""
if "message" in response:
message = response["message"]
elif "story" in response:
message = response["story"]
response = response["likes"]
likes = response["data"]
while "paging" in response and "next" in response["paging"]:
response = self.request(response["paging"]["next"])
if "data" in response:
likes.extend(response["data"])
print("get ", "{:<5}".format(len(likes)), " likes from ", message[:20].replace("\n", " "), "...")
likes = list(map(lambda x:x["id"], likes))
return likes
def get_name_from_id(self, Id):
qs = {"fields":"name",
"access_token":self.token}
response = self.make_request(Id, qs)
if "name" not in response:
print("User Not Found")
return ""
return response["name"]
#Year-Month-Day
def set_since_time(self, since_time = "2000-01-01"):
self.since_time = int(time.mktime(datetime.datetime.strptime(since_time, "%Y-%m-%d").timetuple()))
def set_until_time(self, until_time = "2020-01-01"):
self.until_time = int(time.mktime(datetime.datetime.strptime(until_time, "%Y-%m-%d").timetuple()))
def get_sprout_posts(self):
qs = {"fields":"message, created_time, likes.summary(true)",
"since":self.since_time,
"until":self.until_time,
"access_token":self.token}
response = self.make_request('109294965910483/posts', qs)
if "data" not in response:
print("Posts Not Found")
return []
posts = response["data"]
while "paging" in response and "next" in response["paging"]:
response = self.request(response["paging"]["next"])
if "data" in response:
posts.extend(response["data"])
print("get ", len(posts), " posts")
return posts
print("這是一個可以幫你/妳計算fb好友按讚量的程式,輸入你的fb的API後,就可以計算出排名前十的好友名子及數量");
print("請輸入API , 可以至https://developers.facebook.com/tools/explorer/ 領取 : ")
myFB = FBAPI()
token = input()
myFB.login(token)
print("請輸入開始時間,格式:yyyy-mm-dd");
str1 = input();
print("請輸入結束時間,格式:yyyy-mm-dd");
str2 = input();
myFB.set_since_time(str1);
myFB.set_until_time(str2);
myPost = myFB.get_posts();
num=[0];
name=["0"];
id=1;
for i in range (0,len(myPost),1) :
myLike = myFB.get_like_from_post(myPost[i]);
for j in range (0,len(myLike),1) :
check=False;
tmp=myFB.get_name_from_id(myLike[j])
for k in range(1,id) :
if name[k]==tmp :
check=True;
num[k]+=1;
if check==False :
num.append(1);
name.append(tmp);
id+=1;
print("START")
for i in range (1,id) :
for j in range(1,i) :
if num[i]>num[j] :
tmp=num[j];
num[j]=num[i];
num[i]=tmp;
temp=name[j];
name[j]=name[i];
name[i]=temp;
for i in range (1,11) :
print(name[i] + " " + str(num[i]));
# In[ ]: