الحصول على بيانات سلمان عبر رابط واستخدامها في بيثون (simplejson)
-
08-07-2019 - |
سؤال
وأتصور هذا يجب أن يكون الجواب بسيط، ولكن أنا تكافح: وأود أن أغتنم رابط (الذي النواتج سلمان) والحصول على البيانات في القاموس صالحة للاستعمال في بيثون. أنا عالقة على الخطوة الأخيرة.
>>> import urllib2
>>> import simplejson
>>> req = urllib2.Request("http://vimeo.com/api/v2/video/38356.json", None, {'user-agent':'syncstream/vimeo'})
>>> opener = urllib2.build_opener()
>>> f = opener.open(req)
>>> f.read() # this works
'[{"id":"38356","title":"Forgetfulness - Billy Collins Animated Poetry","description":"US Poet Laureate Billy Collins reads his poem ","url":"http:\\/\\/vimeo.com\\/38356","upload_date":"2006-01-24 15:21:03","thumbnail_small":"http:\\/\\/80.media.vimeo.com\\/d1\\/5\\/47\\/74\\/thumbnail-4774968.jpg","thumbnail_medium":"http:\\/\\/80.media.vimeo.com\\/d1\\/5\\/46\\/85\\/thumbnail-4685118.jpg","thumbnail_large":"http:\\/\\/images.vimeo.com\\/87\\/39\\/873998\\/873998_640x480.jpg","user_name":"smjwt","user_url":"http:\\/\\/vimeo.com\\/smjwt","user_portrait_small":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.30.jpg","user_portrait_medium":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.75.jpg","user_portrait_large":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.100.jpg","user_portrait_huge":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.300.jpg","stats_number_of_likes":"281","stats_number_of_plays":"9173","stats_number_of_comments":23,"duration":"112","width":"320","height":"240","tags":"poetry, poet, online poetry, famous poet, video poetry, modern poetry, famous poem, poetry sites, poetry websites, audio poetry, american poet, animation clips, american poetry, free poetry sites, animation art, free poetry, animated clips, poem, poet laureate"}]'
>>> simplejson.load(f)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.5/site-packages/django/utils/simplejson/__init__.py", line 298, in load
parse_constant=parse_constant, **kw)
File "/usr/lib/python2.5/site-packages/django/utils/simplejson/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.5/site-packages/django/utils/simplejson/decoder.py", line 326, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.5/site-packages/django/utils/simplejson/decoder.py", line 344, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
وأي أفكار أين أنا ذاهب خاطئة؟
المحلول
وحاول
f = opener.open(req)
simplejson.load(f)
ودون تشغيل f.read () أولا. عند تشغيل f.read ()، وslurped محتويات filehandle بحيث لم يبق شيء عندما simplejson.load(f)
مكالمتك
نصائح أخرى
والسطر الأول يقرأ الملف بأكمله. السطر الثاني ثم يحاول قراءة أكثر من ملف، ولكن لا يوجد شيء اليسار:
>>> f.read() # this works
blah blah blah
>>> simplejson.load(f)
وإما مجرد حذف f.read () خط، أو حفظ القيمة من القراءة، واستخدامه في الأحمال:
json = f.read()
simplejson.loads(json)
وهناك طريقة أسهل - لا تحتاج simplejson على الإطلاق. بيثون يمكن تحليل سلمان إلى ديكت / مجموعة باستخدام عبارة وحدة التقييم طالما قمت بتعيين صحيح / خطأ / فارغة إلى القيم الصحيحة.
# fetch the url
url = "https://api.twitter.com/1/users/lookup.json?user_id=6253282,18949452"
json = urllib2.urlopen(url).read()
# convert to a native python object
(true,false,null) = (True,False,None)
profiles = eval(json)
لا تنتمي إلى StackOverflow