[Python] Simple facebook graph api handler

Zbiór ciekawych kodów źródłowych, skryptów i gotowców.
Regulamin forum
-Staraj się poprzedzać nazwę tematu prefiksem z nazwą języka programowania np. [Python] nazwa tematu.
-Wklejaj źródła w znaczniku

Kod: Zaznacz cały

[/b].
-Staraj się w skrócie opisać do czego dane źródło służy.
[b]-Zawsze podaj stronę domową autora (jeśli znasz te informacje)[/b]. Szanujemy cudzą prace!
gridlok
Posty: 1
Rejestracja: 01 lip 2016, 14:58

[Python] Simple facebook graph api handler

Post autor: gridlok »

Witajcie, z racji tego iż spodobały mi się artykuły na blogu, oraz zapewne nie raz się przydadzą postanowiłem się trochę odwdzięczyć.
Jakiś czas temu w ramach powrotu do programowania popełniłem prosty kodzik który obsługuje graph api facebooka.
Proszę jednak traktować to jako ciekawostke/przykład implementacji z racji tego iż trochę poszperałem i ogólnie zajęło to trochę czasu, może ułatwi to niektórym ogólne rozpoczęcie.
Poza tym kod pozwala zalogować się na stronę www ( nie jestem w stanie powiedzieć czy dowolną)

Kod: Zaznacz cały

# Author : gridlok
# simple python grap api handler 
# gridlok.mail[at]gmail.com

import re
import requests
import facebook
import json


#
# LOG WEBSITE CLASS
#
class Logging_into_website:
    def __init__(self,headers,login_data,url,message_url,session):
        self.headers = headers
        self.login_data = login_data
        self.url = url
        self.message_url = message_url
        self.session = session

    def login(self):
        r = s.get(self.url)
        cok = __r.cookies
        self.session.post(self.url, data=self.login_data, headers=self.headers, cookies=cok)

		
#
# LOG API CLASS
#		
 
class Bot_page:
    def __init__(self,access_token):
        self.access_token = access_token

    def __del__(self):
        self.access_token = None
        self.session = None

    def get_messages(self,url,session):
        self.__url = url
        self.__session = session

        try:
            r = self.__session.get(self.__url + 'access_token=' + self.access_token)
            req = r.json()
            print(req['conversations']['data'][0]['messages']['data'][0]['message'])

        except Exception as e:
            print('ERROR in get_messages() : ',str(e))
            return str(e)

    def post_wall_message(self,url,message,session):
        self.__url = url
        self.__message = message
        self.__session = session
        self.__message['access_token'] = self.access_token

        try:

            r = self.__session.post(self.__url,data=self.__message)
            print(r.raise_for_status())
            return r

        except Exception as e:
            print('ERROR in post_wall_message() : ', str(e))
            return str(e)

    def get_posts_from_feed(self,url,session):
        self.__url = url
        self.__session = session

        try:
            r = self.__session.get(self.__url + 'access_token=' + self.access_token)
            req = json.loads(r.text)
            print(req[u'feed'][u'data'][0][u'message'])

            return req
        except Exception as e:
            print('ERROR in get_messages() : ', str(e))
            return str(e)

    def parse_post_from_feed(self,req):
        self.req = req
        __x = (len(self.req[u'feed'][u'data'][0][u'message']))
        for i in range(__x):
            print(self.req[u'feed'][u'data'][i][u'message'])

cfg = {
    "page_id"      : "PAGE_ID_HERE",  
    "access_token" : "ACCESS_TOKEN_HERE"   
    }

post_message_payload = {}
post_message_payload['message'] = 'ss34'
post_message_payload['link'] = 'http://example.com'

get_urls = {'url1' : 'https://graph.facebook.com/me?&',
            'url2' : 'https://graph.facebook.com/me?fields=conversations{messages}&',
            'url3' : 'https://graph.facebook.com/me?fields=feed{message}&',
            'url4' : 'https://graph.facebook.com/me/feed?'}


bot = Bot_page(cfg['access_token'])

with requests.Session() as s:
    try:
        bot.get_messages(get_urls['url2'],s) #pobiera wiadomosc z chatu fanpage (nie mozliwe w przypadku uzytkownika )
        #req = bot.get_posts_from_feed(get_urls['url3'],s) #pobiera ostatni post z tablicy
        #bot.parse_post_from_feed(req) # to jest mocno opocjonalne, nie pamietam nawet czy działa ta funkcja
        #bot.post_wall_message(get_urls['url4'],post_message_payload,s) #wstawia post na tablice fanpage
    except Exception as e:
        print(str(e))

del bot
Żeby nie było również tak łatwo, jest tutaj drobny błąd. Ogólnie rzecz biorąc kod raczej 'eksperymentalny'. Proces generacji access tokenu jest łatwo opisany na stronie facebooka, w kodzie brakuje automatycznego pobierania tegoż kodu.
Kenjin
Ekipa HEP
Posty: 122
Rejestracja: 04 sty 2016, 22:10

Re: [Python] Simple facebook graph api handler

Post autor: Kenjin »

Mimo iż nijak się to ma do tematyki strony to probs za kod :). Sam ostatnio bawiłem się facebook graph API jednak używając do tego PHP. Dużo bardziej związane z tematyką strony jest exploitowanie facebook apps, co zachęcam zgłębić :).
Kenjin
Ekipa HEP
Posty: 122
Rejestracja: 04 sty 2016, 22:10

Re: [Python] Simple facebook graph api handler

Post autor: Kenjin »

Jeszcze 2 pytania. Tworzysz klasy, podstawiasz atrybuty dla obiektow, ale te atrybuty nigdzie nie sa zdeklarowane ? Błąd czy czegoś nie wiem o pythonie ? :P
Druga sprawa, czy klas w pythonie nie trzeba zakończyć "()" ?
Trzecia sprawa, skrypt będzie działał tylko jeśli będzie wywołany bezpośrednio, aby działał zawsze brakuje

Kod: Zaznacz cały

if __name__ == '__main__':
ODPOWIEDZ