Você está lendo a terceira parte de uma série de três partes. É altamente recomendável que você leia os dois artigos anteriores antes de prosseguir com esta parte!
No final do blog anterior, o Flix-Finder suportava pesquisas de filmes com base em parâmetros de classificação de várias agências. A funcionalidade do nosso aplicativo atendeu às expectativas e atingiu a função pretendida. Mas depois de um tempo, os clientes do Flix-Finder começaram a reclamar que o aplicativo não fornecia as informações mais recentes sobre os filmes. Como o Flix-Finder emprega dados estáticos, isso é algo que antecipamos.
O Flix-Finder precisa de algum processo pelo qual seus dados de filme possam ser atualizados para refletir os novos filmes. E isso é algo que estaríamos implementando nesta parte final!
Apesar de existirem várias maneiras de implementar essa funcionalidade, criaremos um novo endpoint que pode ser usado para atualizar os dados. Seus dados mudariam instantaneamente, assim como quando você pressiona um botão. Mas também existem outras estratégias, como a utilização de um cronjob. Uma vez que as especificidades de uma estratégia são descritas neste blog, qualquer nova técnica pode ser facilmente criada usando os mesmos conceitos.
Antes de começarmos a codificar, vamos dar um passo atrás e entender todos os nossos requisitos.
Queremos criar um novo endpoint e atingir esse endpoint deve atualizar os dados que o Flix-Finder usa. Vamos usar o endpoint /update
e qualquer solicitação GET que atinja esse endpoint deve atualizar os dados que nosso aplicativo usa.
Com a interface planejada, vamos agora pensar em ' Como atualizar os dados? ' .
(1) Execute novamente os coletores em dados claros
(2) Buscar os resultados obtidos ao executar o coletor
(3) Substituir os resultados em arquivos estáticos
Para as duas primeiras etapas, podemos usar as APIs fornecidas pela Bright Data. Assim que tivermos os dados, podemos usar o vanilla Python para sobrescrever os arquivos estáticos existentes.
Ótimo! Com tudo planejado, vamos começar a implementação.
Comece criando um novo método dentro do arquivo view.py
do aplicativo de recomendação no Django . Chamaremos esse método updateData
. É aqui que residirá toda a nossa lógica de atualização dos dados estáticos.
# recommender/views.py def update(request): # TODO: Implement this method return HttpResponse("Movie Data Updated!")
Vamos configurar nossos pontos de vista também. Precisamos adicionar o mapeamento para o método recém-criado nas visualizações.
# recommender/urls.py from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index"), path("update", views.updateData, name = "update data") ]
Com isso, criamos com sucesso um novo endpoint no Flix-Finder. Estaremos usando este endpoint para atualizar os dados estáticos. Por enquanto, esse endpoint não faz nada e simplesmente retorna uma mensagem String.
➜ ~ curl localhost:8000/update Movie Data Updated!
Antes de começarmos a usar a API da Bright Data para atualização de dados, precisamos gerar um API Token.
Todas as comunicações com a Bright Data devem conter esse token e ele é usado para fins de autenticação.
Etapas para gerar o token da API:
Add Token
.
Certifique-se de não vazar seu token de API. Qualquer pessoa com acesso ao seu API Token pode literalmente imitá-lo no Bright Data!!!
Depois que o token da API é gerado, estamos prontos para começar a usar as APIs para executar os coletores e buscar dados das execuções do coletor.
Vá para a seção Iniciar por API de seus coletores.
Aqui você encontrará solicitações curl que podem ser usadas para executar novamente os coletores e buscar os resultados.
API para iniciar a execução do coletor: Bright Data fornece um endpoint para iniciar a execução do coletor. O endpoint https://api.brightdata.com/dca/trigger_immediate
espera uma solicitação POST. Ele também espera um parâmetro de consulta ' coletor ' que é usado para identificar exclusivamente o coletor. O cabeçalho deve conter o token da API.
Aqui está a solicitação de curl para o mesmo.
curl -H "Authorization: Bearer API_TOKEN" -H "Content-Type: application/json" -d '{}' "https://api.brightdata.com/dca/trigger_immediate?collector=c_rj3i0wspnhr0ataba"
A resposta desse terminal é um ID de resposta. Isso pode ser usado para buscar os resultados posteriormente.
API para buscar resultados da execução de um coletor: Com o ID de resposta obtido na execução de um coletor, a Bright Data nos fornece outra API para buscar resultados da execução do coletor. O endpoint https://api.brightdata.com/dca/get_result
espera uma solicitação GET. Ele também espera um parâmetro de consulta 'response_id' que é usado para identificar exclusivamente o coletor. O cabeçalho deve conter o token da API.
Aqui está a aparência da solicitação curl para esse ponto de extremidade.
curl "https://api.brightdata.com/dca/get_result?response_id=RESPONSE_ID" -H "Authorization: Bearer API_TOKEN"
Com o conhecimento dos endpoints a serem usados e o token da API à mão, podemos começar a implementar o endpoint de atualização.
(1) Execute novamente os coletores em dados claros
(2) Buscar os resultados obtidos ao executar o coletor
(3) Substituir os resultados em arquivos estáticos
Primeiro, precisamos usar a API do coletor de reexecução e obter um ID de resposta. Estaremos usando a biblioteca de pedidos do Python para executar esta tarefa.
API_TOKEN = "###########" # Replace by your API Token response = requests.post( "https://api.brightdata.com/dca/trigger_immediate?collector=c_rj3i0wspnhr0ataba", headers={"Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json"}, json={} ) if response.status_code < 200 or response.status_code > 299 or 'response_id' not in response.json(): return HttpResponseServerError('Something Wrong Happened') response_id = response.json().get('response_id')
A próxima etapa é usar o ID da resposta para buscar os resultados. Esperaríamos algum tempo antes de tentar buscar os resultados.
time.sleep(30) # Sleeping for 30 seconds get_results_response = requests.get( f"https://api.brightdata.com/dca/get_result?response_id={response_id}", headers={"Authorization": f"Bearer {API_TOKEN}"} )
Com os dados em mãos, podemos sobrescrever o arquivo estático com esses novos dados.
movie_data = get_results_response.json() data_file = open(ROTTEN_TOMATO_DATA_FILE_PATH, encoding="utf8", mode="w") json.dump(movie_data, data_file, indent=4) data_file.close()
Com isso, a implementação do método de atualização está concluída.
Uma solicitação curl simples pode ser feita para o terminal localhost:8000/update
para iniciar o processo de atualização de dados. Assim que a API retornar, os dados terão sido atualizados.
➜ ~ curl localhost:8000/update Movie Data Updated!
Por fim, chegamos à conclusão desta seção. No Flix-Finder, conseguimos integrar a funcionalidade de atualização de dados. Como resultado, nosso Flix-Finder estará sempre disponível para seus usuários com dados atualizados!
Espero que tenham gostado da série de três partes. Este repositório do Github contém todo o código-fonte da coleção.
Você pode me seguir no HackerNoon para mais artigos incríveis. Até o próximo artigo… Até lá, Bom aprendizado! 🙂