[ create a new paste ] login | about

Link: http://codepad.org/uuQljp4C    [ raw code | fork ]

Python, pasted on Apr 14:
# 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[ ]:


Create a new paste based on this one


Comments: