Skip to content

Instantly share code, notes, and snippets.

@marlonangeli
Last active March 6, 2024 16:24
Show Gist options
  • Save marlonangeli/4d9e9e5cb76421be3938949174447dc9 to your computer and use it in GitHub Desktop.
Save marlonangeli/4d9e9e5cb76421be3938949174447dc9 to your computer and use it in GitHub Desktop.
Atualizar descrição de perfil no TabNews - Pipedream
const DUOLINGO_API_URL = 'https://duolingo-tracker.marlonangeli.com.br/api/stats/'
const TABNEWS_API_BASE_URL = 'https://www.tabnews.com.br/api/v1'
async function getStreak(username) {
try {
const response = await fetch(`${DUOLINGO_API_URL}/${username}`);
if (!response.ok) {
throw new Error(`Erro na requisição: ${response.status} - ${response.statusText}`);
}
const responseJson = await response.json();
const streak = responseJson.streak;
return streak;
} catch (error) {
console.error("Erro buscando dados do Duolingo", error.message);
}
}
async function loginTabNews(email, password) {
try {
const response = await fetch(`${TABNEWS_API_BASE_URL}/sessions`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: email,
password: password,
}),
});
if (!response.ok) {
throw new Error(`Erro na requisição: ${response.status} - ${response.statusText}`);
}
const data = await response.json();
return data.token;
} catch (error) {
console.error('Ocorreu um erro fazendo Login:', error.message);
}
}
async function updateProfileDescription(username, token, streak) {
try {
const newDescription = `### Marlon Angeli
Acadêmico de Ciência da Computação na **UTFPR-MD**.
Desenvolvedor de Software Back-end, criando bons bastidores para sua telinha :)
---
Sou viciado no **Duolingo** e minha ofensiva é de **\`${streak}\`** dias :fire: - *é um compromisso sério!*
[<sup>Veja como aqui</sup>](https://www.tabnews.com.br/marlon/tornei-a-descricao-do-meu-perfil-no-tabnews-dinamica)
> #### **[\`marlonangeli.com.br\`](https://marlonangeli.com.br/)** :rocket:`;
const response = await fetch(`${TABNEWS_API_BASE_URL}/users/${username}`, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
cookie: `session_id=${token}`,
},
body: JSON.stringify({
description: newDescription
}),
});
if (!response.ok) {
throw new Error(`Erro na requisição: ${response.status} - ${response.statusText}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error('Ocorreu um erro atualizando o perfil:', error.message);
return error.message;
}
}
export default defineComponent({
async run({ steps, $ }) {
try {
const duolingoUsername = steps.get_record_or_create.$return_value.duolingo.username;
const username = steps.get_record_or_create.$return_value.tabnews.username;
const email = steps.get_record_or_create.$return_value.tabnews.email;
const password = steps.get_record_or_create.$return_value.tabnews.password;
const streak = await getStreak(duolingoUsername);
const token = await loginTabNews(email, password);
const response = await updateProfileDescription(username, token, streak)
console.log(response);
} catch (error) {
console.error("Erro na execução:", error.message);
throw new Error("Erro na execução:", error.message);
}
},
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment