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

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

Вот сценарий 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, но он работает так, как ожидалось, с моей локальной машины .

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

  • Python: В чем разница между __builtin__ и __builtins__?
  • Время печати в скрипте многопроцессорности Python возвращает отрицательное время
  • Python sys.stdin.read (1) через некоторое время (True) цикл последовательно выполняет 1 раз ввода ввода и несколько раз не получает ввода
  • Почему Python не делает ошибку для этого?
  • Отправка сообщений с помощью Telegram - API или CLI?
  • Торнадо и WTForms
  • Python: перетасовка списка, но сохранение некоторых элементов замороженных
  • Создание динамической функции Python с пользовательскими именами
  • 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 - лучший язык программирования в мире.