2015-01-21 3 views
0

저는 며칠 동안 주변을 둘러 보았습니다.이를 이해할 수 없습니다. 기본적으로 서버에 이미지를 업로드하고 대가로 ID를 가져 오는 중이므로 문제는이 ID를 추출하여 데이터베이스에 저장할 준비가 된 문자열로 변경하는 방법을 알 수 없다는 것입니다. 여기 Python 요청 - response.text에서 데이터 추출

프로그램 코드

url = <Server address> 
with open("image.jpg", "rb") as image_file: 
    files = {'file': image_file} 
    auth = ('<Key>', '<Pass>') 
    r = requests.post(url, files=files, auth=auth) 

data = r.json() 
uploaded = data.get('uploaded') 
content_id = uploaded[0] 


print r 
print r.text 
print '--------------' 
print str(content_id) 

그리고

난 당신이 JSON을 받고있는

<Response [200]> 
{ 
    "status": "success", 
    "uploaded": [ 
     { 
      "filename": "image.jpg", 
      "id": "6476edfa1d262ad81181d992da78149d" 
     } 
    ] 
} 

-------------- 
{u'id': u'6476edfa1d262ad81181d992da78149d', u'filename': u'image.jpg'} 
+0

content_id [ 'id']'? – Maroun

답변

6

를 얻을 출력; 당신은 이미 파이썬 구조에 그 디코딩하기 위해 response.json() 방법을 사용하십시오

data = r.json() 

당신은 어떤 다른 파이썬 목록으로 data['uploaded']를 처리 할 수있다; 내용은 단지 하나의 사전, 그래서 다른 사전 키는 id 값을 얻을 :

data['uploaded'][0]['id'] 

당신이 업로드 얼마나 많은 이미지를 알고 여기 [0]에 인덱스를 하드 코딩하는 것이 안전합니다.

try: 
    image_id = data['uploaded'][0]['id'] 
except (IndexError, KeyError): 
    # key or index is missing, handle an unexpected response 
    log.error('Unexpected response after uploading image, got %r', 
       data) 

하거나 data['status']을 처리 할 수있는;

예상치 못한 아무것도 반환 된 경우 감지하는 예외 처리를 사용할 수 있습니다 그것은 모두 여기에서 사용하는 API의 정확한 의미에 달려 있습니다.

+0

그게 효과가! 감사! 이것을 읽으면서 그것은 단지 나를 쳤다. 응답의 형식을 보았을 때 그것은 Dict의 목록에있는 Dict이다. * facepalm *. 나는 한 번에 하나씩 만 업로드 할 수 있다고 생각합니다. 0을 하드 코딩하는 것은 확실히 옵션입니다. 응답의 형식이 둘 이상으로 언제든지 업로드 될 수있는 것처럼 더 실험 할 것입니다. – Grailor

+0

정말 저를 놀라게했습니다, 왜 파이썬에서 객체와 연관지도 사이의 유사성이 존재합니다. 너 _won_, 세이지 - 청지기! :-) – peterh