Neste post mostramos um passo a passo rápido para coletar dados de "minhas" publicações no DEV (dev.to) utilizando sua API versão beta. Usamos bibliotecas do Python 3.9+ (Requests, Json e Pandas) para realizar requisições a endpoints da API DEV, então passar para o formato DataFrame
e, em seguida, exportar como um arquivo .CSV
. Esse CSV
terá os dados dos posts que foram publicados pelo usuário msc2020
até o momento.
Conteúdo ☕
🎶 Wayne Shorter (Featuring Milton Nascimento) - Native Dancer (1975) full album
API DEV, versões v0 e v1 [^]
O DEV dispensa apresentações, mas vale mencionar que ele é feito sobre o Forem, uma "ferramenta open source para construir comunidades" 👊🏼. Ao visitar a homepage da comunidade Forem notamos as várias semelhanças entre ambas.
Atualmente, o DEV possui uma API (versão beta 0.9.7) com documentação em https://developers.forem.com/api. Há algumas diferenças entre as duas versões disponíveis. A principal delas é que alguns endpoints da versão v0 podem ser acessados sem token de acesso (API_TOKEN
). Já a v1 usa token em todos seus endpoints. Segundo a documentação, os endpoints que não exigem autenticação com o token usam o CORS (Cross-origin resource sharing) para controlar o acesso.
Alguns endpoints da API [^]
A tabela abaixo mostra alguns endpoints da API (https://dev.to/api/) acompanhados de informações que podem ser úteis.
Versão | Endpoint | Método | API_KEY | Descrição | Exemplo |
---|---|---|---|---|---|
v0 | /articles | GET | Não | Retorna todos os posts (artigos, dúvidas, divulgações, etc) publicados, sendo 30 por página | curl https://dev.to/api/articles |
v0 | /articles | POST | Sim | Cria um artigo | curl -X POST -H "Content-Type: application/json" -H "api-key: API_KEY" -d '{"article": "title":"Title","body_markdown":"Body","published":false,"tags":["discuss", "javascript"]}}' https://dev.to/api/articles |
v0 | /comments | GET | Não | Retorna todos os comentários de um artigo ou comentários de um podcast, sendo 30 por página | curl https://dev.to/api/comments?a_id=270180 |
As documentações dos endpoints da API na versão v0 e v1 podem ser encontradas, respectivamente, em:
🙈 Atenção: Embora para alguns endpoints da versão v0 não seja exigido um token, no site da API recomendam o uso dessa autenticação.
Obtendo dados da API via Python [^]
O código abaixo realiza a captura, via API DEV, dos dados referentes as minhas (username = msc2020
) postagens:
import requests # instalação: pip install requests
url = 'https://dev.to/api/articles'
querystring = {'username': 'msc2020'}
headers = requests.utils.default_headers()
response = requests.request('GET', url, headers=headers, params=querystring)
print(response.text)
'''
saída esperada:
[{
"type_of":"article","id":1850779,"title":"Raspagem de dados de um site de notícias em pt-BR","description": ...
...
}]
'''
O retorno da chamada GET
usada no código acima, é um objeto (response
) da biblioteca Requests
. Para converter/parsear o conteúdo de response.text
(str
) em uma lista de dicionários (dict
) usamos:
import json # biblioteca padrão do Python
res_json = json.loads(response.text)
🗒️ Nota: No script da requisição passamos o parâmetro username
na chamada GET
. Para ver outros parâmetros disponíveis no endpoint /articles
acesse este link da documentação da API.
A fim de facilitar uma futura análise dos dados coletado, estaremos convertendo esse JSON
em um CSV
. Para quem optar em trabalhar com o Pandas
nas análises, o formato CSV
poderá ajudar muito.
Exportando os dados para CSV [^]
Após coletar o JSON
dos dados via API, utilizamos o to_csv
do Pandas para exportar os dados para o formato CSV
.
Incluindo essa etapa, obtemos o código completo exporta_posts.py
:
# exporta_posts.py
import requests # instalação: pip install requests
import pandas as pd # instalação: pip install pandas
import json # biblioteca padrão do Python
# define nome do usuário
USER_NAME = 'msc2020'
# faz requisição GET
url = 'https://dev.to/api/articles'
querystring = {'username': USER_NAME}
headers = requests.utils.default_headers()
response = requests.request('GET', url, headers=headers, params=querystring)
# print(response.text)
# converte resposta da requisição em uma lista de dict
res_json = json.loads(response.text)
# converte o JSON para Pandas DataFrame
df_posts = pd.DataFrame(res_json)
# exporta os dados do posts para CSV
df_posts.to_csv('dataset_articles_published_msc2020.csv', index=None)
# exibe as 3 primeiras linhas do dataset
print(df_posts.head(3))
'''saídas esperadas:
. 1) 3 primeiras linhas do CSV:
>>>
type_of id ... tags user
0 article 1850779 ... tutorial, braziliandevs, python, beginners {'name': 'msc2020', 'username': 'msc2020', 'tw...
1 article 1842575 ... deeplearning, machinelearning, python, brazili... {'name': 'msc2020', 'username': 'msc2020', 'tw...
2 article 1835701 ... python, tutorial, braziliandevs {'name': 'msc2020', 'username': 'msc2020', 'tw...
[3 rows x 25 columns]
. 2) criação de um arquivo CSV no diretório local: `dataset_articles_published_msc2020.csv`
'''
Testes usando outro nome de usuário [^]
Atualmente, também é possível obter dados sobre os posts de outros usuários usando o endpoint articles
da API DEV. Por exemplo, usando agora USER_NAME = 'anuragrana'
e mudando o nome da saída para dataset_articles_published_user.csv
no código completo exporta_posts.py
é esperado que o retorno seja o seguinte:
type_of id ... user flare_tag
0 article 1855307 ... {'name': 'Anurag Rana', 'username': 'anuragran... NaN
1 article 1276096 ... {'name': 'Anurag Rana', 'username': 'anuragran... NaN
2 article 262178 ... {'name': 'Anurag Rana', 'username': 'anuragran... NaN
[3 rows x 26 columns]
Possibilidades de uso [^]
É possível explorar os dados coletados de várias maneiras. A seguir listamos algumas:
Usar o Insomnia (https://insomnia.rest/download) ou Postman
(https://www.postman.com/downloads/) para acessar outros endpoints da v1 da API DEV. Por exemplo, os endpointsdisplay_ads/
,follows/tags/
,reactions/
ereadinglist
.Realizar uma análise exploratória do
CSV
construído, usando bibliotecas como Pandas, Scikit-learn, Seaborn e Plotly.Aplicar um modelo de LLM como o Social-LLM: Modeling User Behavior at Scale using Language Models and Social Network Data para analisar um dataset formado com dados de vários endpoints selecionados da API DEV.
Contribuir para evolução do projeto Forem, colaborando em seu Github.
Conclusão [^]
O CSV
obtido neste post pode ajudar nas análises de dados com bibliotecas Python. Com poucas adaptações no código criado, é possível obter dados de outros endpoints da API DEV. Se vc tem alguma ideia para usarmos os dados coletados da API, compartilhe.
Top comments (0)