Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python requests - extracting data from response.text

I have been looking around for a few days now and cannot figure this out. Basically I'm uploading an image to a server and get an ID in return, the problem is I cannot figure out how to extract this ID and change it into a String ready to be saved into a database.

Program Code

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)

And here is the output I get

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

--------------
{u'id': u'6476edfa1d262ad81181d992da78149d', u'filename': u'image.jpg'}
like image 754
QweryBot Avatar asked Jan 21 '15 14:01

QweryBot


People also ask

What does Response Text do in Python?

text returns the content of the response, in unicode. Basically, it refers to Binary Response content. Python requests are generally used to fetch the content from a particular resource URI.


1 Answers

You are receiving JSON; you already use the response.json() method to decode that to a Python structure:

data = r.json()

You can treat data['uploaded'] as any other Python list; the content is just the one dictionary, so another dictionary key to get the id value:

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

It is safe to hardcode the index to [0] here as you know how many images you uploaded.

You could use exception handling to detect if anything unexpected was returned:

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)

or you could handle data['status']; it all depends on the exact semantics of the API you are using here.

like image 104
Martijn Pieters Avatar answered Nov 10 '22 20:11

Martijn Pieters