在Facebook上发布没有api但是通过http请求

时间:2015-11-06 19:37:12

标签: python facebook http post python-requests

我正在寻找一种在Facebook上发布状态的方法,只需提供用户名(电子邮件),密码以及我将要发布的状态作为输入。 这是我的实际代码。 (标题是示例,它们是错误的)

代码不起作用,因为我不知道要发送什么以及将其发送到何处。 (http请求)

我该如何改进?

let x3 = rect.origin.x + CGFloat(arc4random()) % rect.size.width
let y3 = rect.origin.y + CGFloat(arc4random()) % rect.size.height
let randomPoint3 = CGPointMake(x3, y3)
self.greencircle.position = randomPoint3
self.addChild(greencircle)
let wait3 = SKAction.waitForDuration(2.0)
greencircle.hidden = true
let wait23 = SKAction.waitForDuration(1.0)
greencircle.hidden = false

1 个答案:

答案 0 :(得分:5)

我这是为了在Facebook群组中发帖。它部分基于一个脚本,不再用于将图片上传到Facebook页面。

注意: 1-用户组ID是硬编码的。您可以通过查询将Facebook组名称转换为ID并将其合并到脚本中的网站来获取。我已经为其他脚本做了这个,并不关心这个。 2 - 我刚刚删除了评论,并在发布之前更改了一些内容,因为它不会乱七八糟。它可能会抱怨某些东西(无法在手机上运行),但总的来说它有效。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import argparse
import datetime
import json
import logging
import re
import random
import requests
import shutil
from pyquery import PyQuery as pq


def main(username, password, page):

    logging.basicConfig(filename='imgur2fb.log', level=logging.DEBUG)

    session = requests.session()

    uid, dtsg = login(session, username, password)

    grupoID = "580864492030176" #(Fijo)

    postToFacebook(session, dtsg, grupoID, "Prueba 98765",uid)


def login(session, username, password):

    '''
    Login to Facebook
    '''

    # Navigate to the Facebook homepage
    response = session.get('https://facebook.com')

    # Construct the DOM
    dom = pq(response.text)

    # Get the lsd value from the HTML. This is required to make the login request
    lsd = dom('[name="lsd"]').val()

    # Perform the login request
    response = session.post('https://www.facebook.com/login.php?login_attempt=1', data={
        'lsd': lsd,
        'email': username,
        'pass': password,
        'default_persistent': '0',
        'timezone': '-60',
        'lgndim': '',
        'lgnrnd': '',
        'lgnjs': '',
        'locale':'en_GB',
        'qsstamp': ''
    })

    '''
    Get the users ID and fb_dtsg token. The fb_dtsg token is required when making requests as a logged in user. It
    never changes, so we only need to grab this token once.

    If the login was successful a cookie 'c_user' is set by Facebook. If the login failed, the 'c_user' cookie
    will not be present. This will raise an exception.
    '''
    try:
        uid = session.cookies['c_user']
        dtsg = re.search(r'(type="hidden" name="fb_dtsg" value="([0-9a-zA-Z-_:]+)")', response.text).group(1)

        dtsg = dtsg[dtsg.find("value")+6:]
        dtsg = dtsg[1:-1]

    except KeyError:
        raise Exception('Login Failed!')

    return uid, dtsg


def postToFacebook(session, dtsg, pageID, message,uID):

    data = {
        "[0]":"",   
        "[1]":"",
        "__ajax__":"",  #AYmIVqL7VfighmiRmFWSBGl6Aucepl7b-I5RPZaAyEEk7rT-6UQQ2zOpUe433RwWQaZACpH9gA--j8otSHry0_Kmd6iZtK2QHyufgZ59eoLtwA
        "__dyn":"",#    1KQdAm1mxu4UpwDF3GAgy6K6Acgy6F8mxq2K2i5U9EowRwFzohxO3J0GwywlEf8lwJwsE2xCyoe8hwv9E887u4o2CyUb852i1gw
        "__req":"",#    e
    "__user":uID,
    "album_fbid":"0",
    "appid":"", 
    "at":"",    
    "backdated_day":"", 
    "backdated_month":"",   
    "backdated_year":"",
    "ch":"",    
    "csid":"",  #b4f44053-0da3-46b8-8c54-782fb428a624
    "fb_dtsg":dtsg, #AQEHse9gjZYA:AQGng01UK1fd
    "freeform_tag_place":"",    
    "fs":"",    
    "internal_extra":"",
    "is_backdated":"",  
    "iscurrent":"", 
    "linkUrl":"",   
    "link_no_change":"",    
    "loc":"{}",
    "m_sess":"",    
    "message":message,# prueba 88
    "npa":"",   
    "npc":"",   
    "npn":"",   
    "npp":"",   
    "npw":"",
    "npz":"",   
    "ogaction":"",  
    "oghideattachment":"",  
    "ogicon":"",    
    "ogobj":"", 
    "ogphrase":"",  
    "ogsuggestionmechanism":"",
    "rating":"0",
    "scheduled_am_pm":"",   
    "scheduled_day":"",
    "scheduled_hours":"",   
    "scheduled_minutes":"", 
    "scheduled_month":"",   
    "scheduled_year":"",
    "sid":"",   
    "source_loc":"composer_group",
    "target":pageID,
    "text_[0]":"",
    "text_[1]":"",  
    "unpublished_content_type":"0",
    "waterfall_id":"988d79257398ec678a8e287046f322ca",  # Esto cambia en cada logueo??
    "waterfall_source":"composer_group"

    }


    response = session.post('https://m.facebook.com/a/group/post/add/?gid='+pageID+'&refid=18',

                            #params=params,
                            data=data,
                            #headers = {'content-type': 'multipart/form-data'})
                            headers = {'Content-Type':'application/x-www-form-urlencoded'})

    print response


try:
    main(username='j*****', password='****', page='https://www.facebook.com/groups/linkdelgrupo')
except Exception, e:
    logging.exception(e)
    print e