API Pinterest – возврат 403 на экземпляр EC2

Я пытаюсь получить количество контактов для данного URL. Я создал этот скрипт Python, который принимает два отдельных URL-адреса и печатает количество контактов для каждого. Когда я запускаю этот скрипт на своей локальной машине, мне возвращается ответ 200, содержащий счетчик контактов, однако, когда я запускаю тот же самый сценарий в своем экземпляре EC2, я возвращаю ошибку 403.

Вот сценарий Python:

  • Ошибка запуска xvfb в ubuntu 11.04
  • uWSGI, ImportError: Нет модуля с именем site на Ubuntu
  • Внедрение AWS часто происходит
  • Неисправность установки scipy в virtualenv на экземпляре amazon ec2 linux micro
  • Разрешения для флагов для записи файлов
  • Отображение имени экземпляра EC2 с использованием Boto 3
  • #!/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, но он работает так, как ожидалось, с моей локальной машины .

    Любая помощь приветствуется!

  • uWSGI, ImportError: Нет модуля с именем site на Ubuntu
  • Установка numpy на Amazon EC2
  • Как запустить экземпляр EC2 с Boto, указав размер EBS?
  • Как запустить код в экземпляре EC2 от Amazone?
  • Устранение неполадок Websockets с EC2 на AWS с использованием Django
  • Разрешения для флагов для записи файлов
  • 3 Solutions collect form web for “API Pinterest – возврат 403 на экземпляр EC2”

    Не ответ, но, надеюсь, это поможет кому-то еще час пробовать этот подход: Pinterest, неудивительно, также блокирует запросы от выходных маршрутизаторов.

    У меня была та же проблема с той же конечной точкой и сузилась она до 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-прокси-сервер

    Этот вопрос был подан несколько лет назад, и текущий ответ, который, я считаю, устарел. EC2 теперь запускает вышеупомянутый скрипт с успешным ответом без необходимости прокси. Я столкнулся с этим вопросом, исследуя мою собственную аналогичную проблему с Google App Engine.

    Pinterest, вероятно, блокирует запросы от IP-блоков, принадлежащих Amazon, что приводит к ошибке 403: Forbidden. Pinterest не поддерживает официальную поддержку своего API, поэтому (по моему предположению) они блокируют максимально возможные источники коммерческого использования своего API. Вы можете проверить это, используя экземпляр от поставщика, не являющегося AWS.

    Python - лучший язык программирования в мире.