Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

exercicio Requests 5 - inclusão da apple

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}')
2 respostas

ultima pasta, a que executa as ações (extraindo-dados.py)

from dados_repos import DadosRepositorio
from manipula_repos import manipulaRepositorios

# Execução Amazon
amazon_rep = DadosRepositorio('amzn')
ling_mais_usadas_amzn = amazon_rep.cria_df_linguagens()
#print(ling_mais_usadas_amzn)
# Execução Netflix
netflix_rep = DadosRepositorio('netflix')
ling_mais_usadas_netflix = netflix_rep.cria_df_linguagens()
#print(ling_mais_usadas_netflix)
# Execução spotfy
spotfy_rep = DadosRepositorio('spotify')
ling_mais_usadas_spotify = spotfy_rep.cria_df_linguagens()
#print(ling_mais_usadas_spotify)
# Execução Apple
apple_rep = DadosRepositorio('apple')
ling_mais_usadas_apple = apple_rep.cria_df_linguagens()
#print(ling_mais_usadas_apple)

# Salvando os dados em CSV

ling_mais_usadas_amzn.to_csv('dados/linguagens_amzn.csv')
ling_mais_usadas_netflix.to_csv('dados/linguagens_netflix.csv')
ling_mais_usadas_spotify.to_csv('dados/linguagens_spotify.csv')
ling_mais_usadas_apple.to_csv('dados/linguagens_apple.csv')



# insanciando um objeto
novo_repo = manipulaRepositorios('RonyKVilar')

# criando um repositorio
nome_repo = 'linguagens-repositorio-empresas'
novo_repo.cria_repo(nome_repo)

#Adicionando os arquivos salvos no repositorio
novo_repo.add_arquivos(nome_repo, 'linguagens_amzn.csv', 'dados/linguagens_amzn.csv')
novo_repo.add_arquivos(nome_repo, 'linguagens_netflix.csv', 'dados/linguagens_netflix.csv')
novo_repo.add_arquivos(nome_repo, 'linguagens_spotify.csv', 'dados/linguagens_spotify.csv')
novo_repo.add_arquivos(nome_repo, 'linguagens_apple.csv', 'dados/linguagens_apple.csv')
solução!

Ei, Rony! Tudo bem?

Achei que as suas classes ficaram nítidas e separou bem as responsabilidades entre a coleta de dados e a manipulação de repositórios. Essa divisão facilita bastante a manutenção e evolução do projeto, além de mostrar domínio sobre o uso da biblioteca requests com autenticação via token.

Parabéns por estar sempre praticando as atividades, isso vai te desenvolver cada vez mais!

Obrigada por compartilhar com a gente e se houver dúvidas é só compartilhar.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!