Цифровая электроника для начинающих (Елисеев) - страница 62


def getFriends(friendID):

url = "https://api.vk.com/method/friends.get?user_id=" + str(friendID)

try:

data = json.load(urllib2.urlopen(url))

cnt = len(data['response'])

return cnt

except:

return -1


Тогда вызвать его можно так:

n = getFriends(29744451)

print “Number of friends:”, n


Аналогично с числом подписчиков канала Youtube, все это можно записать в виде функции:

apiKey = "AIzaSyC26UJw-ubU6NXXXXXXXXXXXXXXXXXX"


def getSubscribersCount(channelID):

url = "https://www.googleapis.com/youtube/v3/channels?id=" + channelID + "&part=statistics&key=" + apiKey

try:

data = json.load(urllib2.urlopen(url))

return data["items"][0]["statistics"]["subscriberCount"]

except:

return -1


Может возникнуть вопрос, как мы получили строчку data["items"][0]["statistics"]["subscriberCount"]? Это просто, если посмотреть на json в браузере. Выглядит он напомним, так:


{


"kind": "youtube#channelListResponse",


"items": [


{


"kind": "youtube#channel",


"etag": "\"_gJQceDMxJ8gP-8T2HLXUoURK8c/Ea_ipJwsnrECB064UURA_RcRR0Y\"",


"id": "UCzz4CoEgSgWNs9ZAvRMhW2A",


"statistics": {


"viewCount": "30872448",


"commentCount": "313",


"subscriberCount": "258797",


"hiddenSubscriberCount": false,


"videoCount": "303"


}


}


]


}


Фигурными скобками обозначается элемент dictionary, доступ к элементам которого осуществляется через квадратные скобки - data["items"] вернет раздел items. Дальше смотрим на сам items: квадратные скобки в json обозначают массив, таким образом "items": [{... }] это массив из одного элемента типа dictionary, обратиться к нему можно как data["items"][0]. Дальше все аналогично, внутри есть еще один вложенный dictionary statistics, внутри него есть поле subscriberCount. Кстати, что такое dictionary, хорошо видно по полю statistics. Это так называемый “словарь” из парных элементов вида “имя”-”значение”, например { "viewCount": "30872448", "commentCount": "313", "subscriberCount": "258797" }.


Формат json сейчас является де-факто стандартом в web, за счет возможности описывать сложные иерархические структуры данных. Примеры разных файлов json желающие могут посмотреть на http://json.org/example.html. Поэтому при желании получать данные с различных веб-сервисов, нужно будет понимать как этот формат устроен.

Кстати, для отладки удобно выводить json прямо из Python, для этого достаточно стандартной функции print:

data = json.load(urllib2.urlopen(url))

print data["items"]

print data["items"][0]

print data["items"]["statistics"]


Так легко видеть, не ошиблись ли мы где-нибудь с полями данных.