0
我在嘗試上傳照片到Facebook頁面的腳本時遇到了一些麻煩。只有通過字符串時,它才能正常工作。頁面文章需要源文件(圖片),這是我遇到的問題。這將返回一個400錯誤。發送文件python
我不完全知道如何處理圖像(和我們的目標是做這個是大頭,所以我非常喜歡圖像的壓縮文件。)
這裏是相當於捲曲請求正常工作: 捲曲-F '=消息簿號碼://bit.ly/alaska' -F '[email protected]' -F '出版= 0' -F '=的access_token TEST' https://graph.facebook.com/act_id/photos
import os
import requests
import csv
import time
import thread
import zipfile
from datetime import datetime
from json import JSONEncoder
from flask import Flask, request, redirect, url_for, send_from_directory, \
render_template
from flask.ext.mail import Mail, Message
from werkzeug import secure_filename
email = ''
token=''
pageid = ''
filename = 'test.csv'
images = 'test.zip'
from flask import request
raw_input = open(filename, 'rb')
info = csv.DictReader(raw_input)
imagefile = zipfile.ZipFile(images, mode='r')
creation_date = datetime.now().strftime('%m-%d-%Y')
output_csv_name = \
"unpublished_posts_%s_%s.csv" % (pageid, creation_date)
output_csv = open(output_csv_name, 'wb')
writer = csv.writer(output_csv, quoting=csv.QUOTE_NONNUMERIC)
writer.writerow(('message',
'source',
'published',
'scheduled_publish_time',
'genders',
'age_max',
'age_min',
'countries',
'regions',
'cities',
'relationship_statuses',
'interested_in',
'locales',
'education_statuses',
'work_networks',
'college_networks',
'college_majors',
'college_years',
'post_id'
))
posts = []
targeting_params = ['genders',
'age_max',
'age_min',
'countries',
'regions',
'cities',
'relationship_statuses',
'interested_in',
'locales',
'education_statuses',
'work_networks',
'college_networks',
'college_majors',
'college_years']
for idx, row in enumerate(list(info)):
# convert date string to unix time-stamp
if row['scheduled_publish_time'] <> '':
s = row['scheduled_publish_time']
timestamp = \
time.mktime(datetime.strptime(s, "%d/%m/%Y").timetuple())
row['scheduled_publish_time'] = timestamp
post_params = [s for s in row.keys() if s not in targeting_params]
post_params.append('targeting')
for param in targeting_params:
if len(row[param]) > 0:
row[param] = row[param].split(",")
targeting_dict = {k: row[k] for k in targeting_params}
targeting_dict = dict([(k, v) for k, v in targeting_dict.items() \
if len(v) > 0])
row['targeting'] = JSONEncoder().encode(targeting_dict)
row = {k: row[k] for k in post_params}
row = dict([(k, v) for k, v in row.items() if len(v) > 0])
message = row['message']
row[u'message'] = u''.join(unichr(ord(c)) for c in row['message'])
imagename = row[u'source']
imagedata = imagefile.extract(imagename)
files = {'source': open(imagedata, 'rb')}
api_method = 'https://graph.facebook.com/%s/feed?access_token=%s'
response = requests.post(api_method % (pageid, token),params=row,files=files)
對不起,如果不夠清楚。不知道什麼是相關的,什麼不相關。我之前工作的腳本中所做的所有更改都是在請求中添加了「文件」,所以我很確定這是我犯了錯誤的地方。
謝謝!
您可以使用[StringIO](http://docs.python.org/2/library/stringio.html)打開一個字符串作爲文件。 – korylprince