Как работать с API в Python
Узнайте, как легко работать с API в Python с помощью библиотеки requests, получая и отправляя данные из различных сервисов!
Алексей Кодов
Автор статьи
10 июля 2023 в 17:48
В этой статье мы рассмотрим, как работать с API (Application Programming Interface) в Python. API позволяет вашему приложению взаимодействовать с другими сервисами, получать и отправлять данные. Для этого мы будем использовать библиотеку requests .
Установка библиотеки requests
Для начала установим библиотеку requests с помощью следующей команды:
pip install requests
Получение данных с API
После установки библиотеки можно начать работу с API. В качестве примера, мы будем использовать открытое API с данными о погоде: https://openweathermap.org/api.
Сначала импортируем библиотеку и определяем URL-адрес API:
import requests url = "https://api.openweathermap.org/data/2.5/weather?q=London&appid=YOUR_API_KEY"
Не забудьте заменить YOUR_API_KEY на ваш личный ключ API.
Теперь мы можем отправить запрос к API и получить ответ:
response = requests.get(url) print(response.status_code) # Выводит код состояния HTTP, например, 200 print(response.json()) # Выводит JSON-ответ
Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Обработка JSON-ответа
Полученный JSON-ответ можно преобразовать в словарь и обрабатывать, как обычные данные:
data = response.json() temperature = data["main"]["temp"] weather_description = data["weather"][0]["description"] print(f"Температура в Лондоне: K") print(f"Погодные условия: ")
Таким образом, мы получили данные о погоде в Лондоне, используя API.
Отправка данных на API
В некоторых случаях вам может понадобиться отправить данные на API. Для этого используйте метод post() из библиотеки requests . В качестве примера рассмотрим сервис https://jsonplaceholder.typicode.com/:
url = "https://jsonplaceholder.typicode.com/posts" data = < "title": "Пример заголовка", "body": "Текст статьи", "userId": 1 >response = requests.post(url, json=data) print(response.status_code) # Выводит код состояния HTTP, например, 201 print(response.json()) # Выводит JSON-ответ
Теперь вы знаете основы работы с API в Python, используя библиотеку requests . Не забывайте изучать документацию к конкретному API, чтобы узнать все возможности и ограничения. Удачи вам в разработке!
Как использовать Python для работы с REST API
Изучите основы работы с REST API с помощью Python и библиотеки Requests, чтобы легко взаимодействовать с веб-сервисами.

Алексей Кодов
Автор статьи
23 июня 2023 в 18:40
В этой статье мы рассмотрим, как использовать Python для работы с REST API. REST API (Representational State Transfer) — это стандартный способ взаимодействия между различными компонентами системы через HTTP(s) протокол. Многие веб-сервисы предоставляют API для доступа к своим данным и функционалу.
Библиотека Requests
Для работы с REST API в Python одной из наиболее популярных библиотек является Requests. Эта библиотека позволяет отправлять HTTP-запросы и обрабатывать ответы от сервера.
Для установки библиотеки Requests используйте следующую команду:
pip install requests
Основы работы с Requests
Давайте рассмотрим основные методы, которые предоставляет библиотека Requests для работы с REST API:
GET-запрос
Пример отправки GET-запроса и обработки ответа:
import requests response = requests.get("https://jsonplaceholder.typicode.com/posts") if response.status_code == 200: data = response.json() print(data) else: print("Ошибка:", response.status_code)
POST-запрос
Пример отправки POST-запроса с данными:
import requests url = "https://jsonplaceholder.typicode.com/posts" data = < "title": "My new post", "body": "Hello, world!", "userId": 1 >response = requests.post(url, json=data) if response.status_code == 201: print("Данные успешно отправлены") print(response.json()) else: print("Ошибка:", response.status_code)
Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

PUT-запрос
Пример отправки PUT-запроса для обновления данных:
import requests url = "https://jsonplaceholder.typicode.com/posts/1" data = < "title": "Updated post", "body": "New content", "userId": 1 >response = requests.put(url, json=data) if response.status_code == 200: print("Данные успешно обновлены") print(response.json()) else: print("Ошибка:", response.status_code)
DELETE-запрос
Пример отправки DELETE-запроса для удаления данных:
import requests url = "https://jsonplaceholder.typicode.com/posts/1" response = requests.delete(url) if response.status_code == 200: print("Данные успешно удалены") else: print("Ошибка:", response.status_code)
Теперь вы знаете основы работы с REST API с помощью Python и библиотеки Requests. Эти знания помогут вам взаимодействовать с различными веб-сервисами и получать доступ к их данным.
Для дополнительной информации и более сложных примеров работы с REST API, рекомендуем обратиться к документации библиотеки Requests: https://docs.python-requests.org/en/master/
Не забывайте практиковаться и экспериментировать с различными API. Удачи вам в изучении Python и работе с REST API!
Обращение к API с помощью Python
Достаточно разговоров — пора сделать первый вызов API! Мы вызовем популярный API для генерации случайных пользовательских данных. Единственное, что нужно знать для начала работы с API — по какому URL-адресу его вызывать. В этом примере это https://randomuser.me/api/, и вот самый простой вызов API, с которого мы и начнем:
OAuth: начало работы
Другой распространенный стандарт аутентификации API — это OAuth. Это очень обширная тема, поэтому мы коснемся только самых основ.
Когда приложение или платформа позволяет зарегистрироваться или войти с помощью другого ресурса, например, Google или Facebook, поток аутенфикации обычно использует OAuth.

Вот пошаговое описание того, что происходит, когда мы нажимаем в приложении Spotify кнопку «Продолжить с Facebook»:
- Приложение Spotify запрашивает API Facebook запустить процесс аутентификации. Для этого приложение Spotify отправит идентификатор приложения ( client_id ) и URL-адрес ( redirect_uri ) для перенаправления пользователя после взаимодействия с API Facebook.
- Клиент будет перенаправлен на сайт Facebook, где нас попросят войти в систему с учетными данными. Приложение Spotify не увидит эти учетные данные и не получит к ним доступа. Это самое важное преимущество OAuth.
- Facebook отобразит данные профиля, запрашиваемые приложением Spotify, и попросит принять или отклонить обмен этими данными.
- Если вы согласитесь предоставить Spotify доступ к своим данным, вы будете перенаправлены обратно в приложение Spotify и получите доступ к системе.
При прохождении четвертого шага Facebook предоставит Spotify специальные учетные данные — токен доступа ( access_token ), который можно многократно использовать для получения информации. Этот токен входа в Facebook действителен в течение шестидесяти дней, но у других приложений могут быть другие сроки действия.
С технической точки зрения вот что нам нужно знать при использовании API с использованием OAuth:
- Нам нужно создать приложение, которое будет иметь идентификатор ( app_id или client_id ) и некоторую секретную строку ( app_secret или client_secret ).
- У нас должен быть URL-адрес перенаправления ( redirect_uri ), который API будет использовать для отправки нам информации.
- В результате аутентификации мы получим код ( exchange_code ), который необходимо обменять на токен доступа ( access_token ).
Существуют различные вариации этого процесса, но большинство потоков OAuth содержат шаги, аналогичные описанным. Давайте попробуем OAuth на примере GitHub API.
OAuth: практический пример
Как мы видели выше, первое, с чего стоит начать — создать приложение. В документации GitHub есть отличное пошаговое объяснение, как это сделать. Чтобы не разворачивать отдельный сервер, в качестве адреса для перенаправления можно использовать адрес https://httpbin.org/anything. Эта веб-страница просто выводит все, что получает на входе.
Создадим приложение, скопируем и вставим Client_ID и Client_Secret вместе с указанным URL для переадресации в файл Python, который назовем github.py :

В API пагинация обычно обрабатывается с помощью двух параметров запроса:
- Атрибут page определяет номер запрашиваемой страницы
- Атрибут size определяет размер каждой страницы
Конкретные имена параметров запроса могут сильно различаться в зависимости от выбора разработчиков API. Некоторые провайдеры API могут также использовать HTTP-заголовки или JSON для возврата текущих фильтров разбивки на страницы.
Снова воспользуемся GitHub API. Параметр per_page= определяет количество возвращаемых элементов, а page= позволяет разбивать результат на отдельные страницы. Пример использования параметров:
>>> response = requests.get("https://api.github.com/events?per_page=1&page=0") >>> response.json()[0]["id"] '15315291644' >>> response = requests.get("https://api.github.com/events?per_page=1&page=1") >>> response.json()[0]["id"] '15316180831' >>> response = requests.get("https://api.github.com/events?per_page=1&page=2") >>> response.json()[0]["id"] '15316181822'
Используя параметр запроса page= , мы получаем страницы без перегрузки API.
Ограничение скорости
Учитывая, что рассматриваемые API-интерфейсы являются общедоступными и могут использоваться кем угодно, ими пытаются злоупотреблять люди с плохими намерениями. Чтобы предотвратить такие атаки, используется метод, называемый ограничением скорости ( rate limit ). API ограничивает количество запросов, которые пользователи могут сделать за определенный период. В случае превышения лимита API-интерфейсы временно блокируют IP-адрес или API-ключ.
Некоторые API, такие как GitHub, даже включают в заголовки дополнительную информацию о текущем ограничении скорости и количестве оставшихся запросов. Это очень помогает избежать превышения установленного лимита.
Использование API с помощью Python: практические примеры
Теперь, когда мы поэкспериментировали с несколькими API, можно объединить полученные знания с помощью еще нескольких практических примеров.
Запрос наиболее популярных сейчас гифок
Как насчет создания небольшого скрипта, который извлекает три самых популярных сейчас GIF-файла с веб-сайта GIPHY? Начните с получения API-ключа:
- Создайте аккаунт на GIPHY
- Перейдите в панель разработчика и зарегистрируйте новое приложение.
- Получите ключ для соединения с API.
Ключ API используем в GIPHY API:
import requests API_KEY = "API_KEY" endpoint = "https://api.giphy.com/v1/gifs/trending" params = response = requests.get(ENDPOINT, params=params).json() for gif in response["data"]: title = gif["title"] trending_date = gif["trending_datetime"] url = gif["url"] print(f" | | ")
Запуск этого кода выведет структурированный список со ссылками на гифки:
Excited Schitts Creek GIF by CBC | 2020-11-28 20:45:14 | https://giphy.com/gifs/cbc-schittscreek-schitts-creek-SiGg4zSmwmbafTYwpj Saved By The Bell Shrug GIF by PeacockTV | 2020-11-28 20:30:15 | https://giphy.com/gifs/peacocktv-saved-by-the-bell-bayside-high-school-dZRjehRpivtJsNUxW9 Schitts Creek Thank You GIF by CBC | 2020-11-28 20:15:07 | https://giphy.com/gifs/cbc-funny-comedy-26n79l9afmfm1POjC
Получение подтвержденных случаев COVID-19 в каждой стране
API сайта, отслеживающего случаи заболевания COVID-19, не требует аутентификации. В следующем примере мы получим общее количество подтвержденных случаев до предыдущего дня:
import requests from datetime import date, timedelta today = date.today() yesterday = today - timedelta(days=1) country = "Russia" endpoint = f"https://api.covid19api.com/country//status/confirmed" params = response = requests.get(endpoint, params=params).json() total_confirmed = 0 for day in response: cases = day.get("Cases", 0) total_confirmed += cases print(f"Total Confirmed Covid-19 cases in : ")
Total Confirmed Covid-19 cases in Russia: 4153735
В этом примере мы получаем общее количество подтвержденных случаев для всей страны. Однако вы также можете просмотреть документацию и получить данные для конкретного города.
Поиск в Google Книгах
Воспользуемся API Google Книг для поиска информации об интересующей нас книге. Вот простой фрагмент кода для поиска названия книги Моби Дик во всем каталоге с выдачей трех первых записей:
import requests endpoint = "https://www.googleapis.com/books/v1/volumes" query = "Моби Дик" params = response = requests.get(endpoint, params=params).json() for book in response["items"]: volume = book["volumeInfo"] title = volume["title"] published = volume.get("publishedDate", "год издания неизвестен") description = volume.get("description", "описание отсутствует") print(f" () | ")
Моби Дик (год издания неизвестен) | «Моби Дик» — самый известный роман американского писателя Германа Мелвилла (1819–1891), романтика, путешественника, философа, поэта, автора морских повестей и психологических рассказов. В настоящем издании «Моби Дик». Моби Дик (2018-01-03) | Моби Дик — это не кит, это человек… Он одинок и у него нет никого и ничего, кроме работы, составляющей всю его жизнь. И лишь настоящие чувства, пробужденные в нем девушкой, изменяют смысл его жизни. Моби Дик (1961) | описание отсутствует
Вы можете использовать свои знания OAuth и создать приложение, хранящее записи о книгах, которые читаете или хотите прочитать.
Заключение
Есть множество других вещей, которые вы ещё узнаете об API: другие заголовки, типы контента, методы аутентификации и так далее. Однако концепции и методы, которые мы рассмотрели в этом руководстве, позволят достаточно быстро разобраться и провзаимодействовать с помощью Python с любыми API.
Напоследок приведем список агрегаторов ссылок на публичные API, которые вы можете использовать в собственных проектах:
- Репозиторий GitHub со списком общедоступных API
- Public APIs
- Public API
- Any API
На Python создают прикладные приложения, пишут тесты и бэкенд веб-приложений, автоматизируют задачи в системном администрировании, его используют в нейронных сетях и анализе больших данных. Язык можно изучить самостоятельно, но на это придется потратить немало времени. Если вы хотите быстро понять основы программирования на Python, обратите внимание на онлайн-курс «Библиотеки программиста». За 30 уроков (15 теоретических и 15 практических занятий) под руководством практикующих экспертов вы не только изучите основы синтаксиса, но и освоите две интегрированные среды разработки (PyCharm и Jupyter Notebook), работу со словарями, парсинг веб-страниц, создание ботов для Telegram и Instagram, тестирование кода и даже анализ данных. Чтобы процесс обучения стал более интересным и комфортным, студенты получат от нас обратную связь. Кураторы и преподаватели курса ответят на все вопросы по теме лекций и практических занятий.
Источники
Python и REST API для получения данных SharePoint
Пример написания запроса для чтения данных списка SharePoint c использованием REST API, и сохранения полученных записей в файл MS Excel.
8.1K открытий
Стандартные способы получения информации SharePoint (экспорт списка в Excel, запрос Power Query) подойдут для разовых потребностей аналитика данных. Но если возникают задачи, требующие автоматизации (например, регулярная загрузка информации с портала, передача ее в таблицу в базе данных и т.д.), не обойтись без написания кода.
В SharePoint реализована служба REST (служба передачи репрезентативного состояния), которая позволяет разработчикам удаленно работать с данными SharePoint.
Технически это выглядит так: мы отправляем на сервер SharePoint веб-запрос, и получаем от сервера ответ в пригодном для дальнейшей обработки формате (в частности JSON), с запрошенной информацией о контенте БД SharePoint:
Используя объектную модель SharePoint, данные портала можно не только читать, но и создавать, обновлять и удалять. Если вы обладаете базовыми знаниями одного из языков программирования (например, Python), то самое простое — чтение и первичную обработку записей списка — реализовать совсем не сложно.
Далее рассмотрим, как загрузить и обработать информацию списка SharePoint, используя общеизвестные библиотеки Python: requests и pandas.
1. Импортируем библиотеки:
import requests, requests_ntlm from requests_ntlm import HttpNtlmAuth import pandas as pd import json
Библиотеки requests_ntlm и json необходимы для аутентификации пользователя на портале SharePoint и обработки полученных данных.
2. Выбираем тип авторизации и задаем учетные данные для авторизации на портале (используем доменный логин и пароль):
username=r’mydomain\mylogin’ password=’mypassword’ auth=HttpNtlmAuth(username,password)
Здесь приведен пример с открытой передачей логина и пароля, но, конечно, лучше реализовать сквозную аутентификацию в текущем сеансе.
3. Начинаем определять параметры, которые далее передадим веб-запросу с использованием библиотеки requests.
Вначале нужно найти в структуре объектов SharePoint интересующий нас объект – список, чтобы обратиться к его элементам (записям).
Есть два способа поиска:
- по уникальному идентификатору (guid) объекта, это ID вида ‘5b7055e5-309d-4b80-bae5-9b570164f85d’, который предварительно нужно найти в параметрах всех списков сайта (но для этого нужно немного «покопаться» в структуре объектов SharePoint);
- более простой способ – найти объект по его отображаемому имени (Title), что мы сейчас и будем делать. Предположим, что мы уже знаем название списка (например, ‘MyList’).
Для обращения к списку нужно написать HTTP-запрос с полным URL объекта, который можно найти, используя метод GetByTitle.
Текст запроса для получения записей списка MyList будет таким:
list_url=r»https://mysite.ru/_api/Web/Lists/GetByTitle(‘MyList’)/Items?$top=2000″
Подробно о составляющих нашего URL:
https://mysite.ru – адрес сайта SharePoint, где находится список (включая дочерние сайты, через слэш, например https://mysite.ru/site1/)
/_api/Web/ — стандартный путь к веб-интерфейсу REST API, его всегда нужно подставлять после адреса сайта/дочернего сайта;
/Lists/ — обращаемся к спискам нашего сайта;
/GetByTitle(‘MyList’)/ — передаем методу GetByTitle название нужного объекта для поиска;
/Items? – запрашиваем элементы найденного объекта SharePoint (записи списка);
$top=2000 – параметр фильтрации запрашиваемых данных, указывающий на число элементов списка (2000), которые мы хотим получить (начиная с первой записи). Его нужно обязательно указывать, т.к. по умолчанию (если запросить просто Items?), API возвратит только первые 100 элементов.
Вместо 2000 можно указать любое интересующее число записей, если нужно получить все – это число можно указать «с запасом» (при необходимости можно определять максимальное количество элементов в списке и передавать его, сейчас используем самый простой вариант).
4. Указываем, какой тип данных хотим вернуть в ответе сервера, а именно JSON:
5. Теперь у нас есть все параметры для составления веб-запроса (URL списка, данные для аутентификации пользователя портала, нужный тип данных). Направляем запрос к сайту SharePoint:
responce=requests.get(list_url,verify=False,auth=auth,headers=headers)
Чтобы убедиться в том, что аутентификация прошла успешно и запрошенные данные успешно получены, можно вывести на экран результат команды print(response):
Если мы видим ответ , это значит, что соединение прошло успешно и данные получены без ошибок.
6. Если мы сейчас выведем на экран полученный объект JSON,
response_json=responce.json() print(response_json)
станет очевидна необходимость структурирования полученных данных:
Полученный ответ имеет типовую для формата JSON структуру, и его необходимо нормализовать при помощи библиотеки json, чтобы работать с ним далее в pandas:
response_json=responce.json() from pandas.io.json import json_normalize response_json_norm =json_normalize(responce_json[‘d’][‘results’])
В данном случае структура полученного JSON содержит вложенные уровни, начинаем разбирать его с первого уровня [‘d’][‘results’]. Результат нормализации представляет собой не что иное, как словарь Python, который можно преобразовать в датафрейм pandas:
df=pd.DataFrame.from_dict(response_json_norm) df.shape df.info()
7. Сейчас мы наконец-то получили данные списка в датафрейм pandas и работаем с ним далее.
Мы видим, что в датафрейм вошли все поля нашего списка MyList, включая и те, которые являются техническими и в пользовательских представлениях списка в SharePoint не отражаются:
Это дает нам возможность определиться с тем, какие столбцы исходного списка мы хотим видеть в итоговой выгрузке (скорее всего все без исключения столбцы нам не нужны).
Предположим, мы определили 3 значимых для нас столбца: ID, Field1, Field2. Остальные мы можем удалить прямо из датафрейма df, но лучше отредактировать веб-запрос, чтобы сразу получить только необходимые данные.
Для этого нужно добавить в запрос фильтрацию с помощью параметра $select= и перечислить нужные столбцы через запятую:
list_url=r»https://mysite.ru/_api/Web/Lists/GetByTitle(‘MyList’)/Items?$select?=ID, Field1, Field2&$top=2000″
Перед следующим условием выборки (количество записей = 2000) теперь нужно добавить амперсанд &, и повторить последующие действия по отправке запроса на сайт SharePoint, получению и обработке ответа из пп. 5-7.8. Заключительный этап – сохранение данных из датафрейма df в файл формата MS Excel.
df.to_excel(‘MyList_in_xls.xlsx’)
Все! Можно работать с данными списка в MS Excel:
Итак, мы рассмотрели простой пример написания веб-запроса для чтения данных списка SharePoint c использованием REST API, и сохранения полученных записей в файл MS Excel. Если вам необходимо не только читать данные из объектов SharePoint, но и изменять, удалять, обновлять их на сайте, необходимую справочную информацию можно найти на сайте компании Microsoft в разделе «API REST SharePoint».
