天行データアプリインタフェースのデータ検索問題

2100 ワード

2019/12/3
天行データ「ごみの分別」Python版apiインターフェイスの問題.(Pythonバージョン、中国語文字)
0.天行データはapiインタフェースを提供します.これらを利用して、ウェブ端末のゴミ検索機能を作ることができます.1.以下は天行データ参照コードのPythonの例ですが、これはPythoon 2の例です.
# -*- coding: utf-8 -*-
import sys, urllib, urllib2, json

url = 'http://api.tianapi.com/txapi/lajifenlei/index?key=APIKEY&word=  '

req = urllib2.Request(url)

resp = urllib2.urlopen(req)
content = resp.read()
if(content):
    print(content)
2.書き換えた後、Pythoon 3のバージョンは以下の通りです.
import urllib.request
key = '************'
word = '  '
url = "http://api.tianapi.com/txapi/lajifenlei/index?key={}&word={}".format(key, word)
req = urllib.request.urlopen(url)
content = req.read()
if(content):
    print(content)
Python 3には既にurllib 2がありません.urllibだけですので、コードの修正が必要です.パッケージを導入する時は、直接requestを導入する必要があります.
File "E:/PyCharmCode/pycharm_Code/01/garbage_sort.py", line 29, in 
    req = urllib.request.urlopen(url)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 50-51: ordinal not in range(128)
urlコードの問題だと思いますが、中国語の文字である「携帯」の問題で、ワード=「携帯」をワード=「iphone」に変えて、結果を得ることができました.結果は、確かに非中国語文字ですが、contentコンテンツをutf-8復号します.content=req.read().decode(「utf-8」)は、中国語の結果を得ます.問題はurlに中国語が含まれていることも確認されました.Python公式サイト3.7.5バージョンの文書を見て、次のように述べました.
"       ASCII     。
            urlopen()    POST     ,         ,     TypeError。"
元々はurl文字列をパーセンテージコードに変換する必要があったのですが、中国語文字列はasciiコードとしてエンコードできないからです.ですから、私たちは中国語を百分コードしてから、encodeはasciiになります.Python 3ではurllib.requestで中国語の符号化に関する公式の関数を見つけることができます.
3.最終コードは以下の通りです.
import json
import urllib.request

key = '************'
word = '  '
word_quote = urllib.request.quote(word)
url = "http://api.tianapi.com/txapi/lajifenlei/index?key={}&word={}".format(key, word_quote)
req = urllib.request.urlopen(url)
content = req.read().decode("utf-8") 
jsonResponse = json.loads(content)  #       json  
print(jsonResponse)
4.以上のコードの中でkeyの値は天行データアカウントに登録して取得する必要があります.