Pinterest的API - 在EC2实例返回403(Pinterest API - retur

2019-08-20 04:34发布

我试图找回的引脚数为某个网址。 我建立这个Python脚本,这需要两个分开的网址,并打印出销的量为每个。 当我在我的本地机器上运行该脚本,我返回一个包含引脚数,但是,当我在我的EC2实例上运行完全相同的脚本我返回403错误200响应。

下面是Python脚本:

#!/usr/bin/python

import requests

# Pinterest API
pinterest_endpoint = "http://api.pinterest.com/v1/urls/count.json?callback=&url="

# Emulate a SQL Query result (id, url)
results = [(1, "http://allrecipes.com/recipe/easter-nests/detail.aspx"), (2, "http://www.foodnetwork.com/recipes/ina-garten/maple-oatmeal-scones-recipe/index.html")]

# Cycle thru each URL
for url in results:
    # Print URL details
    print url[0]
    print url[1]
    print type(url[0])
    print type(url[1])
    print "Downloading: ", url[1]

    # Create Complete URL
    target_url = pinterest_endpoint + url[1]
    print target_url

    # Hit Pinterest API
    r = requests.get(target_url)
    print r
    print r.text
    # Parse string response
    start = r.text.find('\"count\"')
    end = r.text.find(',', start+1)
    content = len('\"count\"')
    pin_count = int(r.text[(start+content+1):end].strip())
    print pin_count

这是我得到我的本地机器(Ubuntu的12.04)的响应:

$ python pin_count.py
1
http://allrecipes.com/recipe/easter-nests/detail.aspx
<type 'int'>
<type 'str'>
Downloading:  http://allrecipes.com/recipe/easter-nests/detail.aspx
http://api.pinterest.com/v1/urls/count.json?callback=&url=http://allrecipes.com/recipe/easter-nests/detail.aspx
<Response [200]>
({"count": 997, "url": "http://allrecipes.com/recipe/easter-nests/detail.aspx"})
997
2
http://www.foodnetwork.com/recipes/ina-garten/maple-oatmeal-scones-recipe/index.html
<type 'int'>
<type 'str'>
Downloading:  http://www.foodnetwork.com/recipes/ina-garten/maple-oatmeal-scones-recipe/index.html
http://api.pinterest.com/v1/urls/count.json?callback=&url=http://www.foodnetwork.com/recipes/ina-garten/maple-oatmeal-scones-recipe/index.html
<Response [200]>
({"count": 993, "url": "http://www.foodnetwork.com/recipes/ina-garten/maple-oatmeal-scones-recipe/index.html"})
993

这是当我在我的EC2实例(Ubuntu的)运行相同的脚本中,我得到的回应:

$ python pin_count.py
1
http://allrecipes.com/recipe/easter-nests/detail.aspx
<type 'int'>
<type 'str'>
Downloading:  http://allrecipes.com/recipe/easter-nests/detail.aspx
http://api.pinterest.com/v1/urls/count.json?callback=&url=http://allrecipes.com/recipe/easter-nests/detail.aspx
<Response [403]>
{ "status": 403, "message": "Forbidden" }
Traceback (most recent call last):
  File "cron2.py", line 32, in <module>
    pin_count = int(r.text[(start+content+1):end].strip())
ValueError: invalid literal for int() with base 10: 'us": 403'

我明白为什么它吐出了一个ValueError消息,我不明白为什么我得到一个403响应,当我从我的EC2实例运行脚本,但它的工作原理是从我的本地机器的预期

任何帮助将非常感激!

Answer 1:

不是一个答案,但希望这将节省别人一小时尝试这个办法:Pinterest的,勿庸置疑,似乎也可以从Tor出口路由器阻止请求。

我有同样的端点同样的问题,并把范围缩小到EC2 + Pinterest的为好。 我试图通过路由通过Tor的请求来规避它。

class PinterestService(Service):
    service_url = "http://api.pinterest.com/v1/urls/count.json?callback="
    url_param = 'url'

    def get_response(self, url, **params):
        params[self.url_param] = url

        # privoxy listens by default on port 8118
        # on the ec2 privoxy is configured to forward
        # socks5 through tor like so:
        # http://fixitts.com/2012/05/26/installing-tor-and-privoxy-on-ubuntu-server-or-any-other-linux-machine/

        http_proxy  = "socks5://127.0.0.1:8118"

        proxyDict = { 
          "http"  : http_proxy
        }

        return requests.get(self.service_url, params=params, proxies=proxyDict)

我已经通过大量的出口路由器循环和响应是一致{ "status": 403, "message": "Forbidden" }

对于解决,我会去通过专用http代理服务器



Answer 2:

这个问题在几年前被提起,而目前的答案,我认为这是过时的。 EC2现在运行具有无需代理成功的响应上面的脚本。 我碰到这个问题就来了,而调查与谷歌应用程序引擎我自己类似的问题。



Answer 3:

Pinterest的可能是阻止来自亚马逊拥有的IP块的请求,导致403:禁止错误。 Pinterest的没有官方的支持,他们的API,所以(我的猜想是),他们正在阻止他们的API的商业用途的最大可能的来源。 您可以通过使用一个实例从非AWS供应商进行测试。



文章来源: Pinterest API - returning 403 on EC2 Instance