聚合数据菜谱大全api接口调用之python

Posted on 2018-03-22 18:24  萧潇墨  阅读(458)  评论(0)    收藏  举报

今天搞个聚合数据的api的弄的有点头大必须几个笔记不然有忘记了,虽然聚合数据广官方提供了api代码示例,但是那个示例已经是过去时了,代码抠过来根本就没有用的,废话不多说上代码:

import json, urllib
from urllib import urlencode
错误主要来源于这两句代码,其余的代码自行上聚合数据官网查看,主要错误的原因是这两句代码已经是过去式了,如今的python已经是今非昔比,下面贴上正确代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
import urllib.request,urllib.error,urllib.parse


# ----------------------------------
# 菜谱大全调用示例代码 - 聚合数据
# 在线接口文档:http://www.juhe.cn/docs/46
# ----------------------------------

def main():
# 配置您申请的APPKey
appkey = "e6eaf4b2ad9f677d3f8b6fd5472e12e0"

# 1.菜谱大全
request1(appkey, "GET")

# 2.分类标签列表
request2(appkey, "GET")

# 3.按标签检索菜谱
request3(appkey, "GET")

# 4.按菜谱ID查看详细
request4(appkey, "GET")


# 菜谱大全
def request1(appkey, m="GET"):
url = "http://apis.juhe.cn/cook/query.php"
params = {
"menu": "红烧肉", # 需要查询的菜谱名
"key": appkey, # 应用APPKEY(应用详细页查询)
"dtype": "json", # 返回数据的格式,xml或json,默认json
"pn": "0", # 数据返回起始下标
"rn": "10", # 数据返回条数,最大30
"albums": "1", # albums字段类型,1字符串,默认数组

}
params = urllib.parse.urlencode(params)
if m == "GET":
f = urllib.request.urlopen("%s?%s" % (url, params))
else:
f = urllib.request.urlopen(url, params)

content = f.read()
res = json.loads(content)
if res:
error_code = res["error_code"]
if error_code == 0:
# 成功请求
print
res["result"]
else:
print
"%s:%s" % (res["error_code"], res["reason"])
else:
print
"request api error"


# 分类标签列表
def request2(appkey, m="GET"):
url = "http://apis.juhe.cn/cook/category"
params = {
"parentid": "", # 分类ID,默认全部
"key": appkey, # 应用APPKEY(应用详细页查询)
"dtype": "json", # 返回数据的格式,xml或json,默认json

}
params = urllib.parse.urlencode(params)
if m == "GET":
f = urllib.request.urlopen("%s?%s" % (url, params))
else:
f = urllib.request.urlopen(url, params)

content = f.read()
res = json.loads(content)
if res:
error_code = res["error_code"]
if error_code == 0:
# 成功请求
print(res["result"])
else:
print("%s:%s" % (res["error_code"], res["reason"]))
else:
print("request api error")


# 按标签检索菜谱
def request3(appkey, m="GET"):
url = "http://apis.juhe.cn/cook/index"
params = {
"cid": "", # 标签ID
"key": appkey, # 应用APPKEY(应用详细页查询)
"dtype": "", # 返回数据的格式,xml或json,默认json
"pn": "", # 数据返回起始下标,默认0
"rn": "", # 数据返回条数,最大30,默认10
"format": "", # steps字段屏蔽,默认显示,format=1时屏蔽

}
params = urllib.parse.urlencode(params)
if m == "GET":
f = urllib.request.urlopen("%s?%s" % (url, params))
else:
f = urllib.request.urlopen(url, params)

content = f.read()
res = json.loads(content)
if res:
error_code = res["error_code"]
if error_code == 0:
# 成功请求
print(res["result"])
else:
print("%s:%s" % (res["error_code"], res["reason"]))
else:
print("request api error")


# 按菜谱ID查看详细
def request4(appkey, m="GET"):
url = "http://apis.juhe.cn/cook/queryid"
params = {
"id": "", # 菜谱的ID
"key": appkey, # 应用APPKEY(应用详细页查询)
"dtype": "", # 返回数据的格式,xml或json,默认json

}
params =urllib.parse.urlencode(params)
if m == "GET":
f = urllib.request.urlopen("%s?%s" % (url, params))
else:
f = urllib.request.urlopen(url, params)

content = f.read()
res = json.loads(content)
if res:
error_code = res["error_code"]
if error_code == 0:
# 成功请求
print("请求成功")
print(res["result"])
else:
print("请求失败")
print("%s:%s" % (res["error_code"], res["reason"]))
else:
print("request api error")


if __name__ == '__main__':
main()
修改内容:原来的form urllib import urlencode 已经是不能用的了 导入会报错
应该写成
import urllib.request,urllib.error,urllib.parse
当然这里也要进行修改
params = urllib.parse.urlencode(params)
如果此方法还是出错那么就需要下载
Visual Studio c++ 工具集

笔记到此结束,文章仅发表个人观点,大神勿喷