Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过Google App Engine从eBay Finding API获取数据(项目)?_Python_Google App Engine_Google Cloud Platform_Ebay Api - Fatal编程技术网

Python 如何通过Google App Engine从eBay Finding API获取数据(项目)?

Python 如何通过Google App Engine从eBay Finding API获取数据(项目)?,python,google-app-engine,google-cloud-platform,ebay-api,Python,Google App Engine,Google Cloud Platform,Ebay Api,我试图通过谷歌应用程序引擎从eBay Finding API中检索一个项目的数据。这似乎与谷歌应用引擎阻止常规请求有关 我尝试使用urlfetch和urllib3,但没有效果。我正在尝试以JSON格式检索项数据 这是我第一次尝试: def get(self): requests_toolbelt.adapters.appengine.monkeypatch() http = urllib3.PoolManager() key = 'WailSahb

我试图通过谷歌应用程序引擎从eBay Finding API中检索一个项目的数据。这似乎与谷歌应用引擎阻止常规请求有关

我尝试使用
urlfetch
urllib3
,但没有效果。我正在尝试以JSON格式检索项数据

这是我第一次尝试:

def get(self):
        requests_toolbelt.adapters.appengine.monkeypatch()
        http = urllib3.PoolManager()
        key = 'WailSahb-Analysis-PRD-4c970d9ce-c9a80d1e'
        search_term = 'laptop'
        url = ('http://svcs.ebay.com/services/search/FindingService/v1\
    ?OPERATION-NAME=findItemsByKeywords\
    &sortOrder=PricePlusShippingLowest\
    &buyerPostalCode=92128&SERVICE-VERSION=1.13.0\
    &SECURITY-APPNAME=' + key +
    '&RESPONSE-DATA-FORMAT=JSON\
    &REST-PAYLOAD\
    &itemFilter(0).name=Condition\
    &itemFilter(0).value=New\
    &itemFilter(1).paramName=Currency\
    &itemFilter(1).paramValue=EUR\
    &itemFilter(2).paramName=FeedbackScoreMin\
    &itemFilter(2).paramValue=10\
    &paginationIntput.entriesPerPage=100\
    &outputSelector(0)=SellerInfo\
    &descriptionSearch=FALSE\
    &paginationIntput.pageNumber=1\
    &keywords=' + search_term)
        url = url.replace(" ", "%20")
        result = http.request('GET', url)
        self.response.write(result)
通过这种方法,我得到以下错误:

MaxRetryError:HTTPSConnectionPool(host='pages.ebay.com',port=443): url已超过最大重试次数: /messages/page_not_found.html?eBayErrorEventName=p4buoajkbnmbehq%60%3C%3Dosu71%2872%3A4505-2018.08.16.15.28.47.151.MST(由协议错误('连接中止')引起,错误(13,'权限 ())

我也尝试过这种方法:

def get(self):
        try:
            api = Connection(appid='WailSahb-Analysis-PRD-4c970d9ce-c9a80d1e', config_file=None)
            response = api.execute('findItemsAdvanced', {'keywords': 'legos'})

            assert(response.reply.ack == 'Success')
            assert(type(response.reply.timestamp) == datetime.datetime)
            assert(type(response.reply.searchResult.item) == list)

            item = response.reply.searchResult.item[0]
            assert(type(item.listingInfo.endTime) == datetime.datetime)
            assert(type(response.dict()) == dict)
            self.response.headers['Content-Type'] = 'text/plain'
            self.response.write(result.data)
        except ConnectionError as e:
            self.response.write(e.response.dict())
其中我得到了这个错误:

TypeError:super(type,obj):obj必须是的实例或子类型 类型

谁能帮我渡过难关


谢谢您的时间。

我试图重现您的问题,并不得不更改一些内容,但最终成功地获得了您试图请求的页面

我第一次一字不差地复制了您的第一次尝试,但我得到的错误略有不同:

MaxRetryError:HTTPSConnectionPool(host='pages.ebay.com',port=443):url超过最大重试次数:/messages/page\u not\u found.html?eBayErrorEventName=p4buoajkbnmbehq%60%3C%3Dsm%7E71%287147606-2018.08.23.14.59.22.829.MST(由SSLError引起(“由于SSL模块不可用,无法连接到HTTPS url”)

这向我表明问题是缺少或无效的SSL模块。您没有共享您的
app.yaml
,但我必须在我的应用程序中添加以下内容才能使HTTPS请求成功:

libraries:
- name: ssl
  version: latest
但是,最终的应用程序引擎响应是不正确的,因为
result
urlib3.response.HTTPResponse
对象,而不是实际响应

为了解决这个问题,我更改了行:

self.response.write(result)

然后这一切都如愿了


以下是文件的最终版本,这些文件使这项工作适合我:

app.yaml
中:

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: main.app

libraries:
- name: ssl
  version: latest
main.py
中:

import webapp2
from requests_toolbelt.adapters import appengine
import urllib3


class MainPage(webapp2.RequestHandler):
    def get(self):
        appengine.monkeypatch()
        http = urllib3.PoolManager()
        key = 'WailSahb-Analysis-PRD-4c970d9ce-c9a80d1e'
        search_term = 'laptop'
        url = (
            'http://svcs.ebay.com/services/search/FindingService/v1\
            ?OPERATION-NAME=findItemsByKeywords\
            &sortOrder=PricePlusShippingLowest\
            &buyerPostalCode=92128&SERVICE-VERSION=1.13.0\
            &SECURITY-APPNAME=' + key +
            '&RESPONSE-DATA-FORMAT=JSON\
            &REST-PAYLOAD\
            &itemFilter(0).name=Condition\
            &itemFilter(0).value=New\
            &itemFilter(1).paramName=Currency\
            &itemFilter(1).paramValue=EUR\
            &itemFilter(2).paramName=FeedbackScoreMin\
            &itemFilter(2).paramValue=10\
            &paginationIntput.entriesPerPage=100\
            &outputSelector(0)=SellerInfo\
            &descriptionSearch=FALSE\
            &paginationIntput.pageNumber=1\
            &keywords=' + search_term)
        url = url.replace(" ", "%20")
        result = http.request('GET', url)
        self.response.write(result.data)


app = webapp2.WSGIApplication([
    ('/', MainPage),
], debug=True)

可能你应该删除私钥或ID,因为它们是敏感信息。看,由于/messages/page_not_found.html?ebayerroeventname=p4buoaj···,看起来你点击了错误的页面或正确的页面,但在某种程度上是错误的。它看起来一点也不像谷歌应用引擎阻止常规请求。你的问题已经解决了吗?嗨,我看你是新来的。如果您觉得我的答案解决了问题,请单击绿色复选标记将其标记为“已接受”。谢谢
import webapp2
from requests_toolbelt.adapters import appengine
import urllib3


class MainPage(webapp2.RequestHandler):
    def get(self):
        appengine.monkeypatch()
        http = urllib3.PoolManager()
        key = 'WailSahb-Analysis-PRD-4c970d9ce-c9a80d1e'
        search_term = 'laptop'
        url = (
            'http://svcs.ebay.com/services/search/FindingService/v1\
            ?OPERATION-NAME=findItemsByKeywords\
            &sortOrder=PricePlusShippingLowest\
            &buyerPostalCode=92128&SERVICE-VERSION=1.13.0\
            &SECURITY-APPNAME=' + key +
            '&RESPONSE-DATA-FORMAT=JSON\
            &REST-PAYLOAD\
            &itemFilter(0).name=Condition\
            &itemFilter(0).value=New\
            &itemFilter(1).paramName=Currency\
            &itemFilter(1).paramValue=EUR\
            &itemFilter(2).paramName=FeedbackScoreMin\
            &itemFilter(2).paramValue=10\
            &paginationIntput.entriesPerPage=100\
            &outputSelector(0)=SellerInfo\
            &descriptionSearch=FALSE\
            &paginationIntput.pageNumber=1\
            &keywords=' + search_term)
        url = url.replace(" ", "%20")
        result = http.request('GET', url)
        self.response.write(result.data)


app = webapp2.WSGIApplication([
    ('/', MainPage),
], debug=True)