2010-07-16 3 views
3

저는 파이썬에서 이미지를 tumblr에 업로드하는 프로젝트에 참여하고 있습니다. Tumblr의 API (http://www.tumblr.com/docs/en/api)를 사용하여 행운을 빌어 왔지만 이미지 업로드로 인해 문제가 발생했습니다. 서버가 반환하는 오류 메시지는 "오류 업로드 사진"이 있음을 알려주는 것으로 제한되어 있습니다.Python 또는 cURL에서 Tumblr으로 이미지를 업로드 하시겠습니까?

API는 표준 HTTP POST 작업을 사용하는 것으로 보이기 때문에이 작업을 수행 할 수있는 방법이 있어야한다는 것을 알고 있습니다. 불행히도, 나는 며칠 동안 진전을 이루지 못했고, 나는 그것에 대해 너희들을 괴롭히는 데 의지하기로 결정했다.

curl과 python의 라이브러리 httplib, urllib, urllib2 및 urllib2_file (http://fabien.seisen.org/python/urllib2_file/)이라는 타사 라이브러리를 사용해 보았습니다. 나는 그들이 일하도록하지 않았다는 것에 좌절감을 느낀다. 그러나 나는 당신이 생각해 낼 수있는 다른 추가 터미널 어플리케이션을 기꺼이 시도 할 것이다.

각 방법은 간단한 텍스트 포스트로 잘 작동하지만 각 사진은 제대로 업로드 된 사진을 얻지 못하는 것 같습니다.

다음은 urllib2_file을 사용하여 작성한 구문입니다. urllib2는 데이터를 업로드하기 위해 'multipart/form-data'메소드를 지원하지 않기 때문에 urllib2_file을 사용하여 해당 기능을 추가하고 있습니다. 그러나 작동시키지 못했습니다. tumblr API는 자신의 서버가 파일 업로드를위한 '일반 게시'방법뿐만 아니라 다중 파트/양식 데이터를 허용한다고 말합니다. 어느 쪽이든 근무하면 행복 할거야. 이 필드를 정의하기 위해 사전을 사용하는 것은 정말 쉽고, 나는 그것이 미래에 훨씬 청소기 보이게 만들 수 있기 때문에 일 경우

import urllib, urllib2, urllib2_file 

url = "http://www.tumblr.com/api/write" 
values1 = {  'email':'EMAIL', 
       'password':'PASSWORD', 
       'type':'regular', 
       'title':'Pythons urllib2', 
       'body':'its pretty nice. Not sure how to make it upload stuff yet, though. Still getting some "error uploading photo" errors... So unhelpful.'} 
values2 = {  'email':'EMAIL', 
       'password':'PASSWORD', 
       'type':'photo', 
       'data': open('../data/media/pics/2009/05-14/100_1167.JPG'), 
       'caption':'Caption'} 
data = urllib.urlencode(values2) 
print "just before defining the request" 
req = urllib2.Request(url,data) 
print "just before doing the urlopen." 
#response = urllib2.urlopen(req) 
try: 
     response = urllib2.urlopen(req) 
except urllib2.URLError, e: 
     print e.code 
     print e.read() 
print "figure out how to handle .read() properly" 
#the_page = response.read() 
#print the_page 
print "done" 

은 이상적인 방법이 될 것입니다.

잘못 될 수있는 문제를 해결하는 방법에 대한 조언을 주시면 감사하겠습니다. 이 시점에서 무엇이 잘못 될 수 있는지 배우는 법을 모르겠습니다. 나는 http RFC에주의를 기울이고 싶다.

나는 컴퓨터에서 서버 사이의 패킷을 스니핑하는 것을 고려해 왔지만 리버스 엔지니어링 HTTP는 과도 할 수 있습니다.

감사합니다. 그냥 파일 객체를 전달하는 것처럼

+0

요청을 요청하지 마십시오 - 시도하십시오. –

+0

충분합니다. 미안 나는 그것을 시작하지 않았다. – Cheesemold

+1

curl -v -F "[email protected]"-F "password = mypassword"-F "type = photo"-F "data = @ C : \ Dir \ Photo 내 컴퓨터에서 컬 라이너가 작동합니다. jpg "http://www.tumblr.com/api/write 작동하지 않는 경우 curl의 상세 출력을 편집하십시오. – NorthGuard

답변

2
    'data': open('../data/media/pics/2009/05-14/100_1167.JPG'), 

가 보이는 ... 파이썬에 대한 정의가 .read()

+0

굉장! 위대한 작품! 심지어 제 3 자 라이브러리 'urllib2_file'을 잘라내어 제대로 작동 할 수 있습니다. open() 함수가 어떻게 작동하는지 더 자세히 읽어야합니다. – Cheesemold

+0

여기의 read() 메소드가 좋다. 그러나 10MB보다 큰 이미지를 업로드하려면 python multipart/form-data http : // hoisie를 살펴보십시오.co.kr/2010/05/18/python-a-multipartformdata-request-urllib2 및 http://code.mythtv.org/doxygen/MultipartPostHandler_8py_source.html – DocWiki

0

텀블러가 API v2를 추가합니다. GitHub PyTumblr에서 찾을 수 있습니다.

저는 teblr이라고하는 tumblr을 사용하기위한 터미널 기반 도구를 만드는 데 사용했습니다. 여기에서 소스 코드를 찾을 수 있습니다 : https://github.com/vijaykumarhackr/teblr/

관련 문제