<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Работа с API. Выгрузка данных. Подключение к источникам - Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</title>
	<atom:link href="https://python.ivan-shamaev.ru/category/%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-api-%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8/feed/" rel="self" type="application/rss+xml" />
	<link>https://python.ivan-shamaev.ru/category/работа-с-api-выгрузка-данных-подключени/</link>
	<description>Библиотеки обработки данных. Примеры. Строки, списки, файлы, числа, массивы. Язык программирования Python 3 - скачать</description>
	<lastBuildDate>Thu, 11 Jun 2020 06:40:59 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.2</generator>

<image>
	<url>https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/cropped-data_science_python3_logo-32x32.png</url>
	<title>Работа с API. Выгрузка данных. Подключение к источникам - Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</title>
	<link>https://python.ivan-shamaev.ru/category/работа-с-api-выгрузка-данных-подключени/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Python API Tutorial: Примеры GET POST AUTH requests (HTTP запросов)</title>
		<link>https://python.ivan-shamaev.ru/python-api-tutorial-get-post-auth-http-requests-examples/</link>
					<comments>https://python.ivan-shamaev.ru/python-api-tutorial-get-post-auth-http-requests-examples/#comments</comments>
		
		<dc:creator><![CDATA[Шамаев Иван]]></dc:creator>
		<pubDate>Sun, 05 Apr 2020 10:06:57 +0000</pubDate>
				<category><![CDATA[Data Science. Data Analytics]]></category>
		<category><![CDATA[Работа с API. Выгрузка данных. Подключение к источникам]]></category>
		<category><![CDATA[get post requests python]]></category>
		<category><![CDATA[get request]]></category>
		<category><![CDATA[post get request]]></category>
		<category><![CDATA[post request]]></category>
		<category><![CDATA[python 3 api data]]></category>
		<category><![CDATA[python http request]]></category>
		<category><![CDATA[python requests get]]></category>
		<category><![CDATA[python requests headers]]></category>
		<category><![CDATA[python requests json]]></category>
		<category><![CDATA[python requests lib]]></category>
		<category><![CDATA[python requests post]]></category>
		<category><![CDATA[python requests документация]]></category>
		<category><![CDATA[request method post]]></category>
		<category><![CDATA[request python 3]]></category>
		<category><![CDATA[requests lib python 3]]></category>
		<category><![CDATA[requests post]]></category>
		<category><![CDATA[requests post data]]></category>
		<category><![CDATA[requests post json]]></category>
		<category><![CDATA[requests python скачать]]></category>
		<category><![CDATA[requests session python]]></category>
		<category><![CDATA[requests многопоточность python]]></category>
		<category><![CDATA[библиотека requests python]]></category>
		<category><![CDATA[модуль requests python]]></category>
		<guid isPermaLink="false">https://python.ivan-shamaev.ru/?p=901</guid>

					<description><![CDATA[<p>В этом уроке по API Python мы узнаем, как получать данные для проектов по науке о данных. В Интернете существуют миллионы API, которые предоставляют доступ к данным. Такие сайты, как Bitrix24, AmoCRM, Yandex API, Twitter, Instagram, VK и Facebook, предлагают определенные данные через свои API. Это могут быть данные предоставляемые только тем, у кого есть [&#8230;]</p>
<p>Сообщение <a href="https://python.ivan-shamaev.ru/python-api-tutorial-get-post-auth-http-requests-examples/">Python API Tutorial: Примеры GET POST AUTH requests (HTTP запросов)</a> появились сначала на <a href="https://python.ivan-shamaev.ru">Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_telegram" href="https://www.addtoany.com/add_to/telegram?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="Telegram" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_vk" href="https://www.addtoany.com/add_to/vk?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="VK" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&#038;title=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" data-a2a-url="https://python.ivan-shamaev.ru/python-api-tutorial-get-post-auth-http-requests-examples/" data-a2a-title="Python API Tutorial: Примеры GET POST AUTH requests (HTTP запросов)"></a></p><p>В этом уроке по API Python мы узнаем, как получать данные для проектов по науке о данных. В Интернете существуют миллионы API, которые предоставляют доступ к данным. Такие сайты, как Bitrix24, AmoCRM, Yandex API, Twitter, Instagram, VK и Facebook, предлагают определенные данные через свои API. Это могут быть данные предоставляемые только тем, у кого есть access_token, либо API с открытым доступом.</p>
<blockquote><p><strong>Python API Tutorial:</strong> Примеры GET POST AUTH requests (HTTP запросов). Структура запроса GET и POST. Выгрузка данных из API облачных систем</p></blockquote>
<p><span>Чтобы использовать API, вы отправляете запрос на удаленный веб-сервер и извлекаете необходимые данные.</span></p>
<h2><strong>Что такое API?</strong></h2>
<p><span>API (Application Programming Interface) или интерфейс прикладного программирования &#8212; это сервер, который вы можете использовать для извлечения и отправки данных с использованием кода (запросов). API-интерфейсы чаще всего используются для извлечения данных, и это будет основной темой этого урока для начинающих.</span></p>
<p><span>Когда мы хотим получить данные из API, нам нужно сделать </span><strong><span>запрос</span></strong><span>. Запросы используются во всем Интернете. Например, когда вы открываете страницу сайта, то сначала ваш веб-браузер отправляет URL-запрос на веб-сервер хостинга (где расположен сайт), а хостинг возвращает некоторое содержимое этой веб-страницы.</span></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/page_request_content_http.png"><img fetchpriority="high" decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/page_request_content_http.png" alt="" width="676" height="415" class="aligncenter size-full wp-image-907" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/page_request_content_http.png 676w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/page_request_content_http-300x184.png 300w" sizes="(max-width: 676px) 100vw, 676px" /></a></p>
<p>Запросы API работают точно так же &#8212; вы отправляете запрос на сервер API для данных, а сервер возвращает ответ. API Необходимы для того, чтобы не давать прямой доступ к базе данных. Т.к. при прямом доступе к БД очень велика вероятность неправильных действий, что может привести к различным ошибкам.</p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/api_request_response.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/api_request_response.png" alt="" width="1187" height="350" class="aligncenter size-full wp-image-913" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/api_request_response.png 1187w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/api_request_response-300x88.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/api_request_response-1024x302.png 1024w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/api_request_response-768x226.png 768w" sizes="(max-width: 1187px) 100vw, 1187px" /></a></p>
<h2><strong>GET и POST запросы с использованием Python</strong></h2>
<p>Существует два метода запросов HTTP (протокол передачи гипертекста): запросы GET и POST в Python.</p>
<h3><strong><span>Что такое HTTP/HTTPS?</span></strong><br />
<span></span></h3>
<p><span><strong>HTTP</strong> &#8212; это набор протоколов, предназначенных для обеспечения связи между клиентами и серверами. Он работает как протокол запроса-ответа между клиентом и сервером.</span></p>
<p><span>Веб-браузер может быть клиентом, а приложение на компьютере, на котором размещен веб-сайт, может быть сервером.</span></p>
<p><span>Итак, чтобы запросить ответ у сервера, в основном используют два метода:</span></p>
<ol>
<li><strong><span>GET</span></strong><span>: запросить данные с сервера. Т.е. мы отправляем только URL (HTTP) запрос без данных. Метод HTTP GET предназначен для получения информации от сервера. В рамках GET-запроса некоторые данные могут быть переданы в строке запроса URI в формате параметров (например, условия поиска, диапазоны дат, ID Объекта, номер счетчика и т.д.).</span></li>
<li><strong><span>POST</span></strong><span>: отправить данные для обработки на сервер (и получить ответ от сервера). Мы отправляем набор информации, набор параметров для API. Метод запроса POST предназначен для запроса, при котором веб-сервер принимает данные, заключённые в тело сообщения POST запроса.</span></li>
</ol>
<p><span>Чтобы сделать HTTP-запросы в python, мы можем использовать несколько HTTP-библиотек, таких как:</span></p>
<ul>
<li><a href="https://docs.python.org/2/library/httplib.html" target="_blank" rel="noopener noreferrer"><span>HTTPLIB</span></a></li>
<li><a href="https://docs.python.org/2/library/urllib.html" target="_blank" rel="noopener noreferrer"><span>URLLIB</span></a></li>
<li><a href="http://docs.python-requests.org/en/master/" target="_blank" rel="noopener noreferrer"><span>REQUESTS</span></a></li>
</ul>
<p><span>Самая элегантная и простая из перечисленных выше библиотек &#8212; это <strong>Requests</strong>. Библиотека запросов не является частью стандартной библиотеки Python, поэтому вам нужно установить ее, чтобы начать работать с ней.</span></p>
<p>Если вы используете <strong>pip</strong> для управления вашими пакетами <strong>Python</strong>, вы можете устанавливать запросы, используя следующую команду:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">pip install requests</pre>
<p>Если вы используете <strong>conda</strong>, вам понадобится следующая команда:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">conda install requests</pre>
<p>После того, как вы установили библиотеку, вам нужно будет ее импортировать. Давайте начнем с этого важного шага:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import requests</pre>
<h3 id="Making-Our-First-API-Request"><strong>Синтаксис / структура получения данных через GET/POST запросы к API</strong><a class="anchor-link" href="https://www.dataquest.io/blog/python-api-tutorial/#Making-Our-First-API-Request"></a></h3>
<p><span>Есть много разных типов запросов. Наиболее часто используемый, </span><strong><span>GET</span></strong><span> запрос, используется для получения данных.</span></p>
<p><span>Когда мы делаем запрос, ответ от API сопровождается </span><strong><span>кодом ответа,</span></strong><span> который сообщает нам, был ли наш запрос успешным. Коды ответов важны, потому что они немедленно сообщают нам, если что-то пошло не так.</span></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/server_api_request_get_request_response_code_response_data.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/server_api_request_get_request_response_code_response_data.png" alt="" width="590" height="298" class="aligncenter size-full wp-image-920" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/server_api_request_get_request_response_code_response_data.png 590w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/server_api_request_get_request_response_code_response_data-300x152.png 300w" sizes="(max-width: 590px) 100vw, 590px" /></a></p>
<p><span>Чтобы сделать запрос «GET», мы будем использовать </span><code>requests.get()</code> <span>функцию</span><span>.</span></p>
<p><span>Метод </span><code class="w3-codespan">post()</code><span> используется, когда вы хотите отправить некоторые данные на сервер.</span></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/server_api_request_post_response_code_python_data.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/server_api_request_post_response_code_python_data.png" alt="" width="590" height="298" class="aligncenter size-full wp-image-930" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/server_api_request_post_response_code_python_data.png 590w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/server_api_request_post_response_code_python_data-300x152.png 300w" sizes="(max-width: 590px) 100vw, 590px" /></a></p>
<p>Ниже приведена подборка различных примеров использования запросов <strong>GET</strong> и <strong>POST</strong> через библиотеку <strong>REQUESTS</strong>. Безусловно, существует еще больше разных случаев. Всегда прежде чем, писать запрос, необходимо обратиться к официальной документации API (например, у Yandex есть документация к API различных сервисов, у Bitrix24 есть документация к API, у AmoCRM есть дока по API, у сервисов Google есть дока по API и т.д.). Вы смотрите какие методы есть у API, какие запросы API принимает, какие данные нужны для API, чтобы он мог выдать информацию в соответствии с запросом. Как авторизоваться, как обновлять ключи доступа (access_token). Все эти моменты могут быть реализованы по разному и всегда нужно ответ искать в официальной документации у поставщика API.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">#GET запрос без параметров
response = requests.get('https://api-server-name.com/methodname_get')

#GET запрос с параметрами в URL
response = requests.get("https://api-server-name.com/methodname_get?param1=ford&amp;param2=-234&amp;param3=8267")

# URL запроса преобразуется в формат https://api-server-name.com/methodname_get?key2=value2&amp;key1=value1
param_request = {'key1': 'value1', 'key2': 'value2'}  
response = requests.get('https://api-server-name.com/methodname_get', params=param_request)

#GET запрос с заголовком
url = 'https://api-server-name.com/methodname_get'  
headers = {'user-agent': 'my-app/0.0.1'}  
response = requests.get(url, headers=headers)

#POST запрос с параметрами в запросе
response = requests.post('https://api-server-name.com/methodname_post', data = {'key':'value'})

#POST запрос с параметрами через кортеж
param_tuples = [('param1', 'value1'), ('param1', 'value2')]  
response = requests.post('https://api-server-name.com/methodname_post', data=param_tuples)

#POST запрос с параметрами через словарь
param_dict = {'param': ['value1', 'value2']}  
response = requests.post('https://api-server-name.com/methodname_post', data=payload_dict) 

#POST запрос с параметрами в формате JSON
import json  
url = 'https://api-server-name.com/methodname_post'  
param_dict = {'param': 'data'}  
response = requests.post(url, data=json.dumps(param_dict))</pre>
<h2>Коды состояния API</h2>
<p><span>Коды состояния возвращаются при каждом запросе к веб-серверу. Коды состояния указывают информацию о том, что произошло с запросом. </span></p>
<p class="summary"><strong><span class="seoSummary">Ответы сгруппированы в пять классов:</span></strong></p>
<ol>
<li class="summary"><span class="seoSummary"><span>Информационные ответы ( </span><code>100</code><span>&#8212; </span><code>199</code><span>),</span></span></li>
<li class="summary"><span class="seoSummary"><span>Успешные ответы ( </span><code>200</code><span>&#8212; </span><code>299</code><span>),</span></span></li>
<li class="summary"><span class="seoSummary"><span>Перенаправления ( </span><code>300</code><span>&#8212; </span><code>399</code><span>),</span></span></li>
<li class="summary"><span class="seoSummary"><span>Ошибки клиента ( </span><code>400</code><span>&#8212; </span><code>499</code><span>),</span></span></li>
<li class="summary"><span class="seoSummary"><span>и ошибки сервера ( </span><code>500</code><span>&#8212; </span><code>599</code><span>).</span></span></li>
</ol>
<p><span>Вот некоторые коды, которые относятся к запросам </span><em><span>GET</span></em><span>:</span></p>
<ul>
<li><code>200</code><span>: Все прошло хорошо и результат был возвращен (если есть).</span></li>
<li><code>301</code><span>: Сервер перенаправляет вас на другую конечную точку. Это может произойти, когда компания меняет доменные имена или имя конечной точки изменяется.</span></li>
<li><code>400</code><span>: Сервер считает, что вы сделали неверный запрос. Это может произойти, если вы отправите неверные данные.</span></li>
<li><code>401</code><span>: Сервер думает, что вы не аутентифицированы. Для многих API требуются учетные данные для входа, поэтому код 401 случается, когда вы отправляете неверные учетные данные для доступа к API.</span></li>
<li><code>403</code><span>: Ресурс, к которому вы пытаетесь получить доступ, запрещен: у вас нет прав для его просмотра.</span></li>
<li><code>404</code><span>: Ресурс, к которому вы пытались получить доступ, не найден на сервере.</span></li>
<li><code>503</code><span>: Сервер не готов обработать запрос.</span></li>
</ul>
<p>Посмотреть информацию по другим ошибкам можно по ссылке <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status" target="_blank" rel="noopener noreferrer">HTTP response status codes</a>.</p>
<h2 id="Working-with-JSON-Data-in-Python"><strong>Работа с данными JSON в Python</strong><a class="anchor-link" href="https://www.dataquest.io/blog/python-api-tutorial/#Working-with-JSON-Data-in-Python"></a></h2>
<p><strong>JSON</strong><span><strong> (JavaScript Object Notation)</strong> &#8212; это язык API. <strong>JSON</strong> &#8212; это способ кодирования структур данных, который простоту чтения данных машинами. <strong>JSON</strong> &#8212; это основной формат, в котором данные передаются туда и обратно в API, и большинство серверов API отправляют свои ответы в формате JSON.</span></p>
<p><span>JSON выглядит так, как будто он содержит словари, списки, строки и целые числа Python. </span><span>Вы можете думать о JSON как о комбинации этих объектов, представленных в виде строк.</span></p>
<p>Рассмотрим пример:</p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/python_json_list_dictionary.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/python_json_list_dictionary.png" alt="" width="733" height="494" class="aligncenter size-full wp-image-924" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/python_json_list_dictionary.png 733w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/python_json_list_dictionary-300x202.png 300w" sizes="(max-width: 733px) 100vw, 733px" /></a></p>
<p><span>Python имеет отличный инструментарий для работы с данными в формате JSON (п</span><span>акет json &#8212; является частью стандартной библиотеки). Мы можем конвертировать </span><em><span>списки</span></em><span> и </span><em><span>словари</span></em><span> в JSON, а также конвертировать строки в </span><em><span>списки</span></em><span> и </span><em><span>словари</span></em><span>.</span></p>
<p><span>Библиотека JSON имеет две основные функции:</span></p>
<ul>
<li><code class="EnlighterJSRAW" data-enlighter-language="python">json.dumps()</code> &#8212; принимает объект Python и преобразует его в строку.</li>
<li><code class="EnlighterJSRAW" data-enlighter-language="python">json.loads()</code> &#8212; принимает строку JSON и преобразует (загружает) ее в объект Python.</li>
</ul>
<p><span>Функция </span><code>dumps()</code><span> особенно полезна, поскольку мы можем использовать ее для печати отформатированной строки, которая облегчает понимание вывода JSON.</span></p>
<p>Рассмотрим пример:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Импорт библиотеки requests
import requests

# Запрос GET (Отправка только URL без параметров)
response = requests.get("http://api.open-notify.org/astros.json")
# Вывод кода
print(response.status_code)
# Вывод ответа, полученного от сервера API
print(response.json())</pre>
<p>Результат:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">200
{'people': [{'craft': 'ISS', 'name': 'Andrew Morgan'}, {'craft': 'ISS', 'name': 'Oleg Skripochka'}, {'craft': 'ISS', 'name': 'Jessica Meir'}], 'message': 'success', 'number': 3}</pre>
<p>Теперь попробуем применить функцию dump() &#8212; структура данных станет более наглядна:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Импорт библиотеки requests
import requests
# Импорт библиотеки json
import json

def jprint(obj):
    # create a formatted string of the Python JSON object
    text = json.dumps(obj, sort_keys=True, indent=4)
    print(text)

# Запрос GET (Отправка только URL без параметров)
response = requests.get("http://api.open-notify.org/astros.json")

# Вывод ответа, через пользовательскую функцию jprint
jprint(response.json())</pre>
<p>Результат:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="json">{
    "message": "success",
    "number": 3,
    "people": [
        {
            "craft": "ISS",
            "name": "Andrew Morgan"
        },
        {
            "craft": "ISS",
            "name": "Oleg Skripochka"
        },
        {
            "craft": "ISS",
            "name": "Jessica Meir"
        }
    ]
}</pre>
<h2>Дополнительные команды для просмотра параметров Response библиотеки Requests Python</h2>
<p><strong>Пример скрипта Python:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Импорт библиотеки requests
import requests

# Запрос GET (Отправка только URL без параметров)
response = requests.get("http://api.open-notify.org/iss-pass.json?lat=40.71&amp;lon=-74")

# Вывод ответа, через пользовательскую функцию jprint
print("response:\n{}\n\n".format(response))
print("response.url:\n{}\n\n".format(response.url))                 #Посмотреть формат URL (с параметрами)
print("response.headers:\n{}\n\n".format(response.headers))         #Header of the request
print("response.status_code:\n{}\n\n".format(response.status_code)) #Получить код ответа
print("response.text:\n{}\n\n".format(response.text))               #Text Output
print("response.encoding:\n{}\n\n".format(response.encoding))       #Узнать, какую кодировку использует Requests
print("response.content:\n{}\n\n".format(response.content))         #В бинарном виде
print("response.json():\n{}\n\n".format(response.json()))           #JSON Output</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">response:
&lt;Response [200]&gt;


response.url:
http://api.open-notify.org/iss-pass.json?lat=40.71&lon=-74


response.headers:
{'Server': 'nginx/1.10.3', 'Date': 'Tue, 07 Apr 2020 05:44:13 GMT', 'Content-Type': 'application/json', 'Content-Length': '519', 'Connection': 'keep-alive', 'Via': '1.1 vegur'}


response.status_code:
200


response.text:
{
  "message": "success", 
  "request": {
    "altitude": 100, 
    "datetime": 1586237266, 
    "latitude": 40.71, 
    "longitude": -74.0, 
    "passes": 5
  }, 
  "response": [
    {
      "duration": 540, 
      "risetime": 1586273822
    }, 
    {
      "duration": 654, 
      "risetime": 1586279549
    }, 
    {
      "duration": 596, 
      "risetime": 1586285414
    }, 
    {
      "duration": 561, 
      "risetime": 1586291303
    }, 
    {
      "duration": 623, 
      "risetime": 1586297135
    }
  ]
}



response.encoding:
None


response.content:
b'{\n  "message": "success", \n  "request": {\n    "altitude": 100, \n    "datetime": 1586237266, \n    "latitude": 40.71, \n    "longitude": -74.0, \n    "passes": 5\n  }, \n  "response": [\n    {\n      "duration": 540, \n      "risetime": 1586273822\n    }, \n    {\n      "duration": 654, \n      "risetime": 1586279549\n    }, \n    {\n      "duration": 596, \n      "risetime": 1586285414\n    }, \n    {\n      "duration": 561, \n      "risetime": 1586291303\n    }, \n    {\n      "duration": 623, \n      "risetime": 1586297135\n    }\n  ]\n}\n'


response.json():
{'message': 'success', 'request': {'altitude': 100, 'datetime': 1586237266, 'latitude': 40.71, 'longitude': -74.0, 'passes': 5}, 'response': [{'duration': 540, 'risetime': 1586273822}, {'duration': 654, 'risetime': 1586279549}, {'duration': 596, 'risetime': 1586285414}, {'duration': 561, 'risetime': 1586291303}, {'duration': 623, 'risetime': 1586297135}]}</pre>
<h2><strong>Примеры запросов GET с использованием библиотеки REQUESTS в PYTHON</strong></h2>
<p>Рассмотрим первый пример получения данных из Yandex Метрика API данных через метод get библиотеки requests.</p>
<h3><strong>Выгрузка данных из Яндекс Метрики с помощью библиотеки Requests.Get</strong></h3>
<p>Код запроса (номер счетчика и токен изменены):</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Импортируем библиотеку requests 
import requests 
  
# Адрес api метода для запроса get 
url_param = "https://api-metrika.yandex.net/stat/v1/data"

# Задаем параметры для API
api_param = {
    "ids":"5251515",
    "metrics":"ym:s:users,ym:s:visits,ym:s:pageviews,ym:s:bounceRate,ym:s:pageDepth,ym:s:avgVisitDurationSeconds",
    "dimensions":"ym:s:date,ym:s:&lt;attribution&gt;TrafficSource,ym:s:&lt;attribution&gt;SourceEngine,ym:s:gender",
    "date1":"10daysAgo",
    "date2":"yesterday",
    "sort":"ym:s:date",
    "accuracy":"full",
    "limit":5
    }

header_params = {
    'GET': '/management/v1/counters HTTP/1.1',
    'Host': 'api-metrika.yandex.net',
    'Authorization': 'OAuth AgAAlkjlkjKAa976ZB-rXh-t-ookfJJcMP979ZU0',
    'Content-Type': 'application/x-yametrika+json'
    }

# Отправляем get request (запрос GET)
response = requests.get(
    url_param,
    params=api_param,
    headers=header_params
)

result = response.json()
query = result['query']
data = result['data']
print(query)
print('======================')
print(data)</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="json">{'ids': [5251515], 'dimensions': ['ym:s:date', 'ym:s:lastTrafficSource', 'ym:s:lastSourceEngine', 'ym:s:gender'], 'metrics': ['ym:s:users', 'ym:s:visits', 'ym:s:pageviews', 'ym:s:bounceRate', 'ym:s:pageDepth', 'ym:s:avgVisitDurationSeconds'], 'sort': ['ym:s:date'], 'date1': '2020-04-02', 'date2': '2020-04-11', 'limit': 5, 'offset': 1, 'group': 'Week', 'auto_group_size': '1', 'quantile': '50', 'offline_window': '21', 'attribution': 'Last', 'currency': 'RUB', 'adfox_event_id': '0'}
======================
[{'dimensions': [{'name': '2020-04-02'}, {'name': 'Internal traffic', 'icon_id': '-1', 'icon_type': 'traffic-source', 'id': 'internal'}, {'name': 'mydomain.ru', 'id': 'internal.mydomain.ru', 'favicon': 'mydomain.ru'}, {'name': 'Not specified', 'id': None}], 'metrics': [1.0, 1.0, 1.0, 0.0, 1.0, 16.0]}, {'dimensions': [{'name': '2020-04-02'}, {'name': 'Internal traffic', 'icon_id': '-1', 'icon_type': 'traffic-source', 'id': 'internal'}, {'name': 'mydomain.ru', 'id': 'internal.mydomain.ru', 'favicon': 'mydomain.ru'}, {'name': 'male', 'id': 'male'}], 'metrics': [3.0, 5.0, 8.0, 0.0, 1.6, 194.4]}, {'dimensions': [{'name': '2020-04-02'}, {'name': 'Internal traffic', 'icon_id': '-1', 'icon_type': 'traffic-source', 'id': 'internal'}, {'name': 'mydomain.ru', 'id': 'internal.mydomain.ru', 'favicon': 'mydomain.ru'}, {'name': 'female', 'id': 'female'}], 'metrics': [8.0, 9.0, 16.0, 0.0, 1.77777778, 91.77777778]}, {'dimensions': [{'name': '2020-04-02'}, {'name': 'Direct traffic', 'icon_id': '0', 'icon_type': 'traffic-source', 'id': 'direct'}, {'name': None, 'id': None, 'favicon': None}, {'name': 'Not specified', 'id': None}], 'metrics': [23.0, 29.0, 37.0, 44.82758621, 1.27586207, 34.79310345]}, {'dimensions': [{'name': '2020-04-02'}, {'name': 'Direct traffic', 'icon_id': '0', 'icon_type': 'traffic-source', 'id': 'direct'}, {'name': None, 'id': None, 'favicon': None}, {'name': 'male', 'id': 'male'}], 'metrics': [32.0, 50.0, 63.0, 4.0, 1.26, 44.74]}]</pre>
<h3><strong>Получим цены на нефть в формате JSON с ресурса oilpriceapi.com</strong></h3>
<p>Для получения токена, необходимо пройти регистрацию на сайте <a href="http://oilpriceapi.com" target="_blank" rel="noopener noreferrer">oilpriceapi.com</a>.</p>
<p><strong>Пример</strong> для токена <strong>984a45fflkj09j9870ujkheca7jj977658</strong> (у вас будет свой ключ доступа):</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Импортируем библиотеку requests 
import requests

# Адрес api метода для запроса get
url = 'https://api.oilpriceapi.com/v1/prices/latest'
headers = {
    'Authorization': 'Token 984a45fflkj09j9870ujkheca7jj977658',
    'Content-Type': 'application/json'
}

# Отправляем get request (запрос GET)
response = requests.get(url = url, headers = headers)
data = response.json()
print(data)</pre>
<p><strong>Результат в формате json:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">{'status': 'success', 'data': {'price': 30.08, 'formatted': '$30.08', 'currency': 'USD', 'code': 'BRENT_CRUDE_USD', 'created_at': '2020-04-14T21:50:00.585Z', 'type': 'spot_price'}}</pre>
<h3><strong>Загрузить курс валют с помощью Requests GET в Python Pandas <span style="color: #ff6600;">cbr.ru</span></strong></h3>
<p>Пример загрузки курсов валют по конкретному дню в DataFrame Pandas Python. Курс валюты отдается в формате XML, поэтому нам понадобится дополнительная библиотека <strong>xml.etree.ElementTree:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Импортируем библиотеку requests 
import requests
import pandas as pd 
import xml.etree.ElementTree as et 

v_date = '16.04.2020'

# Адрес api метода для запроса get
url = 'https://www.cbr.ru/scripts/XML_daily.asp'
params = {
    'date_req': v_date
}

# Отправляем get request (запрос GET)
response = requests.get(url, params)

tree = et.ElementTree(et.fromstring(response.text))
root = tree.getroot()

df_cols = ["date", "numcode", "charcode", "nominal", "name", "value"]
rows = []

for node in root:
    s_numcode = node.find("NumCode").text if node is not None else None
    s_charcode = node.find("CharCode").text if node is not None else None
    s_nominal = node.find("Nominal").text if node is not None else None
    s_name = node.find("Name").text if node is not None else None
    s_value = node.find("Value").text if node is not None else None
    
    rows.append({"date": v_date, "numcode": s_numcode,
                 "charcode": s_charcode, "nominal": s_nominal,
                 "name": s_name, "value": s_value})

df = pd.DataFrame(rows, columns = df_cols)
print(df.head())</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">         date numcode  ...                                      name    value
0  16.04.2020     036  ...                      Австралийский доллар  46,7719
1  16.04.2020     944  ...                     Азербайджанский манат  43,4509
2  16.04.2020     826  ...  Фунт стерлингов Соединенного королевства  92,2684
3  16.04.2020     051  ...                          Армянских драмов  15,1801
4  16.04.2020     933  ...                         Белорусский рубль  30,0814

[5 rows x 6 columns]</pre>
<h3><strong>Получаем данные по вакансиям с сайта <span style="color: #ff6600;">hh.ru</span> через API с помощью Python Requests Get</strong></h3>
<p>У сайта hh есть API, вся свежая информация находится на сайте <a href="https://python.ivan-shamaev.ru/%d0%ba%d0%b0%d1%80%d1%82%d0%b0-%d1%81%d0%b0%d0%b9%d1%82%d0%b0-%d0%b2%d1%81%d0%b5-%d1%81%d1%82%d0%b0%d1%82%d1%8c%d0%b8-%d0%b1%d0%bb%d0%be%d0%b3%d0%b0-%d0%bf%d1%80%d0%be-python/" target="_blank" rel="noopener noreferrer">https://dev.hh.ru/</a> и в документации <a href="https://github.com/hhru/api" target="_blank" rel="noopener noreferrer">https://github.com/hhru/api</a>. В рамках примера будет использован <strong><a href="https://github.com/hhru/api/blob/master/docs/vacancies.md" target="_blank" rel="noopener noreferrer">метод vacancies</a></strong>.</p>
<p>Скрипт запроса:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Импортируем библиотеку requests 
import requests
import pandas as pd

page_number = 0
search_str = "qlik"
area_str = "1"

# Адрес api метода для запроса get
url = 'https://api.hh.ru/vacancies'
param = {
    "text":search_str,
    "area":area_str,
    "page":page_number
    }

# Отправляем get request (запрос GET)
response = requests.get(url,param)
data = response.json()

#Создаем пустой dict (словать данных)
dict_data = {}
dict_number = 0

# Количество страниц
for i in range(0,data['pages']):
    param_cycle = {
            "text":search_str,
            "area":area_str,
            "page":i
        }

    response_cycle = requests.get(url,param_cycle)
    print("ЗАПРОС №" + str(i))

    result = dict(response_cycle.json())
    result = result['items']
    #Парсим исходный list формата Json в dictionary (словарь данных)
    for y in range(0, len(result)-1):
        dict_data[dict_number] = {
            'id':result[y]['id'],
            'premium':result[y]['premium'],
            'name':result[y]['name'],
            'department':result[y]['department'],
            'has_test':result[y]['has_test'],
            'area_name':result[y]['area']['name'],
            'salary':result[y]['salary'],
            'type_name':result[y]['type']['name'],
            'snippet_requirement':result[y]['snippet']['requirement']
        }
        dict_number = dict_number + 1
    
    print("==================================")

print(dict_data[0])</pre>
<p>Результат выполнения скрипта:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">ЗАПРОС №0
==================================
ЗАПРОС №1
==================================
ЗАПРОС №2
==================================
ЗАПРОС №3
==================================
ЗАПРОС №4
==================================
ЗАПРОС №5
==================================
{'id': '36694453', 'premium': False, 'name': 'Аналитик', 'department': None, 'has_test': False, 'area_name': 'Москва', 'salary': None, 'type_name': 'Открытая', 'snippet_requirement': 'Продвинутый пользователь MS Exсel, SQL - простые запросы, пользователь одной или нескольких BI систем - Tableu, &lt;highlighttext&gt;Qlik&lt;/highlighttext&gt; sense, Power BI, Microstrategy. '}</pre>
<h3><strong>Пример выгрузки данных из Bitrix24 с использованием requests, pandas и Thread</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import os
import requests
import pandas as pd
from urllib.request import urlopen
from threading import Thread
 
class DownloadThread(Thread):
    """
    Пример многопоточной загрузки данных из Bitrix24
    """
    
    def __init__(self, item, name, url_param, start_param, total, method_name):
        """Инициализация потока"""
        Thread.__init__(self)
        self.item = item
        self.name = name
        self.url_param = url_param
        self.start_param = start_param
        self.total = total
        self.method_name = method_name
    
    def run(self):
        """Запуск потока"""
        msg_start = "Поток %s стартовал загрузку start_param = %s, total = %s" % (self.name, self.start_param, self.total)
        print("")

        result_data=[]
        for i in range (self.start_param, self.total, 50):
            
            # Задаем параметры для API
            param = {
                "start": str(i)
                }
            
            # Отправляем get request (запрос GET)
            response = requests.get(self.url_param,param)
                
            result = response.json()
            data = result['result']
            result_data += data

        dict_data = {}
        
        for j in range(0,len(result_data)):
            dict_data[j] = dict(result_data[j])


        #Создаем DataFrame из dict (словаря данных или массива данных)
        dict_keys = dict_data[0].keys()
        df = pd.DataFrame.from_dict(dict_data, orient='index',columns=dict_keys)
        df = df.replace('\n',' ', regex=True)

        df.to_excel(self.method_name + "_" + str(self.item) +  ".xlsx", sheet_name='data', index=False)
        
        msg_end = "Поток %s завершил загрузку start_param = %s, total = %s" % (self.name, self.start_param, self.total)
        print(msg_end)
        print("")
 
 
def main(url_param, list_totals, step, total_param, method_name):
    """
    Запуск программы
    """
    start_param = 0
    for item, val in enumerate(list_totals):
        name = "Поток %s" % (item+1)
        print(name)
        if (val + step)&lt;=total_param:
            total = val + step
        else:
            total = total_param
        thread = DownloadThread(item, name, url_param, start_param, total, method_name)
        thread.start()
        start_param = total
 
if __name__ == "__main__":

    # method
    method_name = "crm.deal.list"

    # Адрес api метода для запроса get 
    url_param = "https://crm.domain.ru/rest/1/56kjhoghius78yfpojj90/" + method_name 

    response = requests.get(url_param)
    result = response.json()
    total_param = result['total']
    step = 10000
    print(total_param)

    list_totals = list(range(0,total_param,step))

    main(url_param, list_totals, step, total_param, method_name)
</pre>
<h2><strong>Примеры запросов POST с использованием библиотеки REQUESTS в PYTHON</strong></h2>
<h3><strong>Выгрузка данных из Bitrix24 с фильтром по дате из REST API</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import requests

# method
method_name = "crm.deal.list"

# Адрес api метода для запроса get 
url_param = "https://domain.ru/rest/1/854984lkjdsijd432/" + method_name

params = {"filter[&gt;DATE_CREATE]": "2020-01-01T00:00:01+01:00"}

print(params)

response = requests.post(url_param, data = params)
result = response.json()
total = result['total']
print(total)</pre>
<h3><strong>Выгрузка данных из Bitrix24 с двумя фильтрами по дате из REST API</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import requests

# method
method_name = "crm.deal.list"

# Адрес api метода для запроса get 
url_param = "https://domain.ru/rest/1/854984lkjdsijd432/" + method_name

params = {
    "filter[&lt;DATE_CREATE]":"2019-01-01T00:00:01+01:00",
    "filter[&gt;DATE_CREATE]":"2020-01-01T00:00:01+01:00"
    }

print(params)

response = requests.post(url_param, data = params)
result = response.json()
total = result['total']
print(total)</pre>
<h3><strong>Пример полноценной выгрузки данных из Bitrix24 API в Excel с помощью библиотек Requests &amp; Pandas</strong></h3>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Импортируем библиотеку requests 
import requests 
import pandas as pd
import datetime
import xlsxwriter

# Старт
print(datetime.datetime.now())

# method
method_name = "crm.deal.list"

# Адрес api метода для запроса get 
url_param = "https://crm.domain.ru/rest/1/oj98lLKHNldoij97tg/" + method_name

# Путь для сохранения данных
excel_path = "C:\\PythonETL\\0_ExtractData\\Bitrix24\\Excel\\crm.deal.list\\"

params = {
    "filter[&gt;=DATE_CREATE]":"2020-01-01 00:00:00"
    }

response = requests.post(url_param, params)
result = response.json()
total_param = result['total']
result_data=[]

print(total_param)


for i in range (0,total_param,50):
    for attempt in range(10):
        try:
            # Задаем параметры для API
            param = {
                "start": str(i),
                "filter[&gt;=DATE_CREATE]":"2020-01-01 00:00:00"
                }
            # Отправляем get request (запрос GET)
            response = requests.post(url_param,param)
                
            result = response.json()
            data = result['result']
            result_data += data
        except:
            print("Ошибка при попытке " + str(attempt))
            continue
        break

print("Данные выгрузились, собираем df")
dict_data = {}

for j in range(0,len(result_data)):
    dict_data[j] = dict(result_data[j])


#Создаем DataFrame из dict (словаря данных или массива данных)
dict_keys = dict_data[0].keys()
df = pd.DataFrame.from_dict(dict_data, orient='index',columns=dict_keys)

print("Выгружаем Excel")
#Выгрузка данных из DataFrame в Excel
df.to_excel(excel_path + method_name + "_2020"  +  ".xlsx", sheet_name='data', index=False, engine='xlsxwriter')


# Конец
print(datetime.datetime.now())</pre>
<p><a class="a2a_button_telegram" href="https://www.addtoany.com/add_to/telegram?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="Telegram" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_vk" href="https://www.addtoany.com/add_to/vk?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="VK" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&amp;linkname=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpython-api-tutorial-get-post-auth-http-requests-examples%2F&#038;title=Python%20API%20Tutorial%3A%20%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%20GET%20POST%20AUTH%20requests%20%28HTTP%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%29" data-a2a-url="https://python.ivan-shamaev.ru/python-api-tutorial-get-post-auth-http-requests-examples/" data-a2a-title="Python API Tutorial: Примеры GET POST AUTH requests (HTTP запросов)"></a></p><p>Сообщение <a href="https://python.ivan-shamaev.ru/python-api-tutorial-get-post-auth-http-requests-examples/">Python API Tutorial: Примеры GET POST AUTH requests (HTTP запросов)</a> появились сначала на <a href="https://python.ivan-shamaev.ru">Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://python.ivan-shamaev.ru/python-api-tutorial-get-post-auth-http-requests-examples/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Как выгрузить данные из Yandex Metrika с помощью Python?</title>
		<link>https://python.ivan-shamaev.ru/extract-data-from-yandex-metric-using-python/</link>
					<comments>https://python.ivan-shamaev.ru/extract-data-from-yandex-metric-using-python/#comments</comments>
		
		<dc:creator><![CDATA[Шамаев Иван]]></dc:creator>
		<pubDate>Wed, 19 Feb 2020 21:32:31 +0000</pubDate>
				<category><![CDATA[Работа с API. Выгрузка данных. Подключение к источникам]]></category>
		<category><![CDATA[Yandex Metrika]]></category>
		<category><![CDATA[Yandex Metrika DataLabs]]></category>
		<category><![CDATA[Yandex Metrika Extract Data]]></category>
		<category><![CDATA[Yandex Metrika Python 3]]></category>
		<category><![CDATA[Yandex Metrika Аналитика]]></category>
		<guid isPermaLink="false">https://python.ivan-shamaev.ru/?p=612</guid>

					<description><![CDATA[<p>Начало работы с Yandex Metrika API В работе с любыми API первым шагом является получение токена. Затем нужно понять как формировать запросы. Плюс необходимо узнать какие форматы данных может возвращать API &#8212; обычно это JSON, CSV (TXT). Вся документация Yandex Metrika API обычно очень быстро гуглится &#8212; https://yandex.ru/dev/metrika/. Я пройдусь от получения токена до получения [&#8230;]</p>
<p>Сообщение <a href="https://python.ivan-shamaev.ru/extract-data-from-yandex-metric-using-python/">Как выгрузить данные из Yandex Metrika с помощью Python?</a> появились сначала на <a href="https://python.ivan-shamaev.ru">Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_telegram" href="https://www.addtoany.com/add_to/telegram?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="Telegram" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_vk" href="https://www.addtoany.com/add_to/vk?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="VK" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&#038;title=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" data-a2a-url="https://python.ivan-shamaev.ru/extract-data-from-yandex-metric-using-python/" data-a2a-title="Как выгрузить данные из Yandex Metrika с помощью Python?"></a></p><h2><strong>Начало работы с Yandex Metrika API</strong></h2>
<p>В работе с любыми API первым шагом является получение токена. Затем нужно понять как формировать запросы. Плюс необходимо узнать какие форматы данных может возвращать API &#8212; обычно это JSON, CSV (TXT).</p>
<p>Вся документация Yandex Metrika API обычно очень быстро гуглится &#8212; <strong><a href="https://yandex.ru/dev/metrika/" target="_blank" rel="noopener noreferrer">https://yandex.ru/dev/metrika/</a>.</strong></p>
<p>Я пройдусь от получения токена до получения выгруженных данных из Yandex.Metrika.</p>
<h3><strong>Yandex Token Для яндекс метрики</strong></h3>
<p>Итак, в соответствии с инструкцией регистрируем приложение по ссылке <strong><a href="https://oauth.yandex.ru/client/new" target="_blank" rel="noopener noreferrer">https://oauth.yandex.ru/client/new</a>. </strong>Ссылка может поменяться, так что если что гуглите.</p>
<p><strong>Указываем название приложения, делаем описание.</strong></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/1_yandex_app_token.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/1_yandex_app_token.png" alt="" width="989" height="542" class="aligncenter size-full wp-image-615" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/1_yandex_app_token.png 989w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/1_yandex_app_token-300x164.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/1_yandex_app_token-768x421.png 768w" sizes="(max-width: 989px) 100vw, 989px" /></a></p>
<p>В поле Callback URL вбиваем https://oauth.yandex.ru/verification_code</p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/2_1_url_site.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/2_1_url_site.png" alt="" width="732" height="372" class="aligncenter size-full wp-image-621" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/2_1_url_site.png 732w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/2_1_url_site-300x152.png 300w" sizes="(max-width: 732px) 100vw, 732px" /></a></p>
<p><strong>Указываете в разделе Yandex.Metrika, что выдать доступ для получения статистики.</strong></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/2_yandex_metrika_get_statistik.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/2_yandex_metrika_get_statistik.png" alt="" width="751" height="152" class="aligncenter size-full wp-image-616" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/2_yandex_metrika_get_statistik.png 751w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/2_yandex_metrika_get_statistik-300x61.png 300w" sizes="(max-width: 751px) 100vw, 751px" /></a></p>
<p><strong>Создаете приложение</strong></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/3_create_app.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/3_create_app.png" alt="" width="656" height="180" class="aligncenter size-full wp-image-617" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/3_create_app.png 656w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/3_create_app-300x82.png 300w" sizes="(max-width: 656px) 100vw, 656px" /></a></p>
<p>Яндекс выдаст Вам ID и Пароль. Можете не запоминать их, всегда можно найти в списке созданных приложений &#8212; <strong><a href="https://oauth.yandex.ru/" target="_blank" rel="noopener noreferrer">https://oauth.yandex.ru/</a></strong></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/4_ID_Password_callback_URL_3.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/4_ID_Password_callback_URL_3.png" alt="" width="635" height="316" class="aligncenter size-full wp-image-627" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/4_ID_Password_callback_URL_3.png 635w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/4_ID_Password_callback_URL_3-300x149.png 300w" sizes="(max-width: 635px) 100vw, 635px" /></a></p>
<p>Берем ссылку</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">https://oauth.yandex.ru/authorize?response_type=token&amp;client_id=&lt;идентификатор приложения&gt;</pre>
<p>Подставляем &lt;идентификатор приложения&gt; &#8212; это полученный ID. Вбиваем в URL в браузере. У меня получилась такая вот ссылка:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">https://oauth.yandex.ru/authorize?response_type=token&amp;client_id=14b9e156de754901b9f321f53746092b</pre>
<p>Дальше появляется запрос на предоставление доступа</p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/5_yandex_metrika_token.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/5_yandex_metrika_token.png" alt="" width="695" height="253" class="aligncenter size-full wp-image-624" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/5_yandex_metrika_token.png 695w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/5_yandex_metrika_token-300x109.png 300w" sizes="(max-width: 695px) 100vw, 695px" /></a></p>
<p><strong>Далее подтверждаем. Яндекс выдаст нам наш токен для доступа к статистике:</strong></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/6_our_token_yandex_metrika_api.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/6_our_token_yandex_metrika_api.png" alt="" width="1037" height="227" class="aligncenter size-full wp-image-625" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/6_our_token_yandex_metrika_api.png 1037w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/6_our_token_yandex_metrika_api-300x66.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/6_our_token_yandex_metrika_api-1024x224.png 1024w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/6_our_token_yandex_metrika_api-768x168.png 768w" sizes="(max-width: 1037px) 100vw, 1037px" /></a></p>
<h3>Наш токен</h3>
<p>Запоминаем, никому не передаем, храним в укромном уголке на компьютере или в почте <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">AgAAAAAJ8KAaAAYl4OT0R-7vKU3IkJuf0A0lN5M</pre>
<h3><b>Ставим библиотеку tapi-yandex-metrika</b><a href="https://github.com/pikhovkin/yametrikapy" target="_blank" rel="noopener noreferrer"></a></h3>
<p><a href="https://github.com/pavelmaksimov/tapi-yandex-metrika" target="_blank" rel="noopener noreferrer"><strong>https://github.com/pavelmaksimov/tapi-yandex-metrika</strong></a></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">pip install pyOpenSSL</pre>
<pre class="EnlighterJSRAW" data-enlighter-language="null">pip install tapi-yandex-metrika</pre>
<p><strong>Пример запроса (поменяйте TOKEN и IDS счетчика)</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">from tapi_yandex_metrika import YandexMetrikaStats

ACCESS_TOKEN = "AgAAAAAJ8KAaAAYl4OT0R-7vKU3IkJuf0A0lN5M"

# По умолчанию возвращаются только 10000 строк отчета, 
# если не указать другое кол-во в параметре limit.
# В отчете может быть больше строк, чем указано в limit 
# Тогда необходимо сделать несколько запросов для получения всего отчета.
# Чтоб сделать это автоматически вы можете указать 
# параметр receive_all_data=True при инициализации класса.

api = YandexMetrikaStats(
    access_token=ACCESS_TOKEN, 
    # Если True, будет скачивать все части отчета. По умолчанию False.
    receive_all_data=True
)
params = dict(
    ids="18197662",
    metrics="ym:s:visits,ym:s:bounces",
    dimensions="ym:s:date,ym:s:startOfMonth",
    sort="ym:s:date",
    limit=10
)
result = api.stats().get(params=params)
print(result().data)</pre>
<h3>Получение данных из Yandex.Metrika API с помощью библиотеки tapi_yandex_metrika и выгрузка данных в Excel через Pandas DataFrame</h3>
<p>Ниже будет представлен пример получения данных из Yandex.Metrika API с последующим сохранением массива данных в Excel.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">from tapi_yandex_metrika import YandexMetrikaStats
import json
import pandas as pd

ACCESS_TOKEN = "AgAAdsf4fffaAAYl4OT0R-7vKU3IkJuf0A0lN5M"
METRIC_IDS = "54333315"

# По умолчанию возвращаются только 10000 строк отчета, 
# если не указать другое кол-во в параметре limit.
# В отчете может быть больше строк, чем указано в limit 
# Тогда необходимо сделать несколько запросов для получения всего отчета.
# Чтоб сделать это автоматически вы можете указать 
# параметр receive_all_data=True при инициализации класса.

#Параметры запроса для библиотеки tapi_yandex_metrika
api = YandexMetrikaStats(
    access_token=ACCESS_TOKEN, 
    # Если True, будет скачивать все части отчета. По умолчанию False.
    receive_all_data=True
)

#Параметры запроса для библиотеки tapi_yandex_metrika
params = dict(
    ids = METRIC_IDS,
    metrics = "ym:s:users,ym:s:visits,ym:s:pageviews,ym:s:bounceRate,ym:s:pageDepth,ym:s:avgVisitDurationSeconds",
    dimensions = "ym:s:date,ym:s:&lt;attribution&gt;TrafficSource,ym:s:&lt;attribution&gt;SourceEngine,ym:s:gender",
    date1 = "2daysAgo",
    date2 = "yesterday",
    sort = "ym:s:date",
    accuracy="full",
    limit = 200
)
#Получаем данные из Yandex.Metrika API
result = api.stats().get(params=params)
result = result().data
result = result[0]['data']

#Создаем пустой dict (словать данных)
dict_data = {}

#Парсим исходный list формата Json в dictionary (словарь данных)
for i in range(0, len(result)-1):
    dict_data[i] = {
            'date':result[i]["dimensions"][0]["name"],
            'traffic-source':result[i]["dimensions"][1]["name"],
            'traffic-details':result[i]["dimensions"][2]["name"],
            'users':result[i]["metrics"][0],
            'visits':result[i]["metrics"][1],
            'pageviews':result[i]["metrics"][2],
            'bounceRate':result[i]["metrics"][3],
            'pageDepth':result[i]["metrics"][4],
            'avgVisitDurationSeconds':result[i]["metrics"][5]
          }

#Создаем DataFrame из dict (словаря данных или массива данных)
dict_keys = dict_data[0].keys()
df = pd.DataFrame.from_dict(dict_data, orient='index',columns=dict_keys)

#Выгрузка данных из DataFrame в Excel
df.to_excel("Трафик.xlsx",
        sheet_name='data',
        index=False)</pre>
<p>Получается вот такого вида Excel (некоторые значения удалил):</p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/yandex_metrika_api_data_extract_pandas_dataframe_to_excel.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/yandex_metrika_api_data_extract_pandas_dataframe_to_excel.png" alt="" width="893" height="525" class="aligncenter size-full wp-image-897" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/yandex_metrika_api_data_extract_pandas_dataframe_to_excel.png 893w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/yandex_metrika_api_data_extract_pandas_dataframe_to_excel-300x176.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/02/yandex_metrika_api_data_extract_pandas_dataframe_to_excel-768x452.png 768w" sizes="(max-width: 893px) 100vw, 893px" /></a></p>
<h3><strong>Пример выгрузки данных из API Яндекс Метрики с помощью библиотеки Requests</strong></h3>
<p>Пусть у нас будет файл params.json</p>
<pre class="EnlighterJSRAW" data-enlighter-language="json">{"ACCESS_TOKEN": "AOUHOHOI89h9uohaAAZB-rXh-t-olkj98yhIII",
"METRIC_IDS": {
    "site1.ru":"2342315",
    "site2.ru":"136443462",
    "site3.ru":"46465917"},
"PATH": "D:\\PythonETL\\Data\\0_Raw_Data\\YandexMetrika\\"}</pre>
<p>Далее рассмотрим пример выгрузки данных по трафику по дням за последний год &#8212; файл <strong>1_Трафик.py</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Импортируем библиотеку requests 
import requests
import json
import pandas as pd
import sys 
from datetime import datetime
from dateutil.relativedelta import relativedelta

# Загружаем параметры из json
config_variables = json.load(open('params.json'))

# Устанавливаем переменные
locals().update(config_variables)

# Вычисляем дату начала и дату окончания
DayStart = datetime.today() + relativedelta(years=-1)
DayStart = DayStart.strftime('%Y-%m-%d')
DayEnd = datetime.today().strftime('%Y-%m-%d')

# Адрес api метода для запроса get 
url_param = "https://api-metrika.yandex.net/stat/v1/data"

def get_data_to_excel(api_param,header_params,file_name):
        # Отправляем get request (запрос GET)
        response = requests.get(
            url_param,
            params=api_param,
            headers=header_params
        )

        # Преобразуем response с помощью json()
        result = response.json()
        result = result['data']

        # Создаем пустой dict (словать данных)
        dict_data = {}

        # Парсим исходный list формата Json в dictionary (словарь данных)
        for i in range(0, len(result)-1):
                dict_data[i] = {
                                'date':result[i]["dimensions"][0]["name"],
                                'traffic-source':result[i]["dimensions"][1]["name"],
                                'traffic-details':result[i]["dimensions"][2]["name"],
                                'users':result[i]["metrics"][0],
                                'visits':result[i]["metrics"][1],
                                'pageviews':result[i]["metrics"][2],
                                'bounceRate':result[i]["metrics"][3],
                                'pageDepth':result[i]["metrics"][4],
                                'avgVisitDurationSeconds':result[i]["metrics"][5]
                          }

        #Создаем DataFrame из dict (словаря данных или массива данных)
        dict_keys = dict_data[0].keys()
        df = pd.DataFrame.from_dict(dict_data, orient='index',columns=dict_keys)

        #Выгрузка данных из DataFrame в Excel
        df.to_excel(file_name,sheet_name='data',index=False)

for (site_name,metric_id) in METRIC_IDS.items():
        print("site_name: " + site_name)
        
        # Задаем параметры для API
        api_param = {
            "ids":metric_id,
            "metrics":"ym:s:users,ym:s:visits,ym:s:pageviews,ym:s:bounceRate,ym:s:pageDepth,ym:s:avgVisitDurationSeconds",
            "dimensions":"ym:s:date,ym:s:&lt;attribution&gt;TrafficSource,ym:s:&lt;attribution&gt;SourceEngine",
            "date1":DayStart,
            "date2":DayEnd,
            "sort":"ym:s:date",
            "accuracy":"full",
            "limit":100000
            }

        # Задаем параметры header_params
        header_params = {
            'GET': '/management/v1/counters HTTP/1.1',
            'Host': 'api-metrika.yandex.net',
            'Authorization': 'OAuth ' + ACCESS_TOKEN,
            'Content-Type': 'application/x-yametrika+json'
            }

        # Название файла Excel
        file_name = PATH + metric_id +"_Трафик.xlsx"

        # Вызываем функцию
        get_data_to_excel(api_param,header_params,file_name)</pre>
<p>И для запуска из-под Windows создаем батник &#8212; <strong>0_Run_All_Scripts.cmd</strong>. В этот файл друг за дружкой можно вписать несколько скриптов и затем cmd файл внести в <strong>Windows Sheduler</strong> для выгрузки по расписанию.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">chcp 1251
"C:\Users\User\AppData\Local\Programs\Python\Python37-32\python.exe" "D:\PythonETL\Scripts\0_Extract\YandexMetrika\1_Трафик.py"</pre>
<p><a class="a2a_button_telegram" href="https://www.addtoany.com/add_to/telegram?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="Telegram" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_vk" href="https://www.addtoany.com/add_to/vk?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="VK" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&amp;linkname=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fextract-data-from-yandex-metric-using-python%2F&#038;title=%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B8%D0%B7%20Yandex%20Metrika%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Python%3F" data-a2a-url="https://python.ivan-shamaev.ru/extract-data-from-yandex-metric-using-python/" data-a2a-title="Как выгрузить данные из Yandex Metrika с помощью Python?"></a></p><p>Сообщение <a href="https://python.ivan-shamaev.ru/extract-data-from-yandex-metric-using-python/">Как выгрузить данные из Yandex Metrika с помощью Python?</a> появились сначала на <a href="https://python.ivan-shamaev.ru">Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://python.ivan-shamaev.ru/extract-data-from-yandex-metric-using-python/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
	</channel>
</rss>
