Segue os codigos, vou separa, pois acabei separando as 2 classes e o arquivo de execução
(dados_repos.py)
import requests
import pandas as pd
class DadosRepositorio:
def __init__(self, owner):
self.owner = owner
self.api_base_url = 'https://api.github.com'
self.acess_token = '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'
self.headers = {
'Authorization': f'Bearer {self.acess_token}',
'X-GitHub-Api-Version': '2022-11-28',
'Accept': 'application/vnd.github+json'
}
def lista_repositorios(self):
repos_list = []
page = 1
while True:
url_page = f'{self.api_base_url}/users/{self.owner}/repos?page={page}'
response = requests.get(url_page, headers=self.headers)
if response.status_code != 200:
print(f'Erro na requisição: {response.status_code} - {response.text}')
break
repositorio = response.json()
if not repositorio:
print(f"Total pages = {page - 1}")
break
repos_list.append(repositorio)
page += 1
print(f"Total de Repositorios coletados: {len(repos_list)}")
return repos_list
def nomes_repos(self, repos_list):
repo_names = []
for page in repos_list:
for repo in page:
try:
repo_names.append(repo['name'])
except:
pass
return repo_names
def nomes_linguagens(self, repos_list):
repo_language = []
for page in repos_list:
for repo in page:
try:
repo_language.append(repo['language'])
except:
pass
return repo_language
def cria_df_linguagens(self):
repositorio = self.lista_repositorios()
nomes = self.nomes_repos(repositorio)
linguagens = self.nomes_linguagens(repositorio)
dados = pd.DataFrame()
dados['repositorio_name'] = nomes
dados['language'] = linguagens
return dados
(manipula_repos.py)
import requests
import base64
class manipulaRepositorios:
def __init__(self,username):
self.username = username
self.api_base_url = 'https://api.github.com'
self.acess_token = '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'
self.headers = {
'Authorization': f'Bearer {self.acess_token}',
'X-GitHub-Api-Version': '2022-11-28',
'Accept': 'application/vnd.github+json'
}
def cria_repo(self, nome_repo):
data = {
'name': nome_repo,
'description': 'Dados dos respositorios de algumas empresas',
'private': False,
}
response = requests.post(f'{self.api_base_url}/user/repos', json=data, headers=self.headers)
print(f'status_code criação do repositorio: {response.status_code}')
if response.status_code != 201:
print(response.json())
def add_arquivos(self, nome_repo, nome_arquivo, caminho_arquivo):
with open(caminho_arquivo, 'rb') as file:
content = file.read()
encoded_content = base64.b64encode(content)
url = f'{self.api_base_url}/repos/{self.username}/{nome_repo}/contents/{nome_arquivo}'
data = {
'message': f'Adcionando um novo arquivo',
'content' : encoded_content.decode('utf-8')
}
response = requests.put(url, json=data, headers=self.headers)
print(f'status_code adição do arquivo: {response.status_code}')