Страницы

Поиск по вопросам

суббота, 15 февраля 2020 г.

Как лайкнуть репозиторий на github через requests.post?

#python #python_3x #github #requests




Или может есть библиотека с такой возможностью ?
    


Ответы

Ответ 1



Звёздочку репозиторию можно поставить с помощью GitHub REST API v3: PUT /user/starred/:owner/:repo Есть много библиотек на Питоне, которые оборачивают это API. Легко свою создать: import requests class Github: def __init__(self, token, api_url='https://api.github.com'): self.token = token self.api_url = api_url self.headers = { 'Accept': 'application/vnd.github.v3+json', 'Authorization': 'token ' + self.token } def star(self, repo, owner): requests.put(f"{self.api_url}/user/starred/{owner}/{repo}", headers=self.headers).raise_for_status() Пример, чтобы звёздочку cpython поставить: import os github = Github(os.environ['GITHUB_OAUTH_TOKEN']) github.star(repo='cpython', owner='python') Чтобы попробовать, можно завести личный token. Для приложений, можно автоматически token создать.

Ответ 2



Прямые запросы к серверу GitHub через requests не помогут. Сделано это для безопасности Вам определенно пора узнать что такое API. У гитхаб оно располагается тут. А вот не плохой туториал

Ответ 3



GitHub REST API использует HTTP PUT (requests.put), чтобы добавить звёздочку репозиторию. Чтобы через HTTP POST (requests.post) это реализовать, можно использовать Github GraphQL API v4: data = graphql( '''mutation ($starrable_id: ID!) { addStar(input: {starrableId: $starrable_id}) { clientMutationId starrable { id viewerHasStarred } } }''', starrable_id=repo_id) где repo_id необходимо получить ещё одним GraphQL запросом: data = graphql( '''query ($repo: String!, $owner: String!) { repository(name: $repo, owner: $owner) { id } }''', repo='cpython', owner='python') repo_id = data['repository']['id'] где graphql() вызывает requests.post(): import os import requests def graphql(query, **variables): r = requests.post( 'https://api.github.com/graphql', headers={ 'Authorization': 'Bearer ' + os.environ['GITHUB_OAUTH_TOKEN'] }, json=dict(query=query.replace('\n', ' '), variables=variables)) r.raise_for_status() response = r.json() if 'errors' in response: raise RuntimeError(response['errors']) return response['data'] Можно использовать тот же token, что и REST API.

Комментариев нет:

Отправить комментарий