Рубрики
Без рубрики

Как использовать DEV.TO API для получения статистики вашей статьи

Мне было любопытно выяснить, могу ли я получить количество просмотров, которые я создаю на dev.to … Теги с Python, API, статистикой, Devto.

Мне было любопытно выяснить, сможете ли я получить количество просмотров, которые я создаю на сообществе dev.to и посмотреть, как числа развиваются со временем. Я обнаружил, что платформа Dev.to имеет хорошую обширную и хорошо документированную API: https://docs.dev.to/api/ Где вы можете прочитать информацию, которую я искал. В документации вы можете увидеть, как создать токен доступа вашего человека. Не забудьте вставить этот токен в скрипт ниже, где вы найдете строку Ваш частный API-ключ - здесь Отказ

Сценарий предназначен для запуска планировщика один раз в день, чтобы получить статистику статьи. Сценарий сохранит полученную статистику статьи в файл JSON с именем devtoarticlestats.json. Похоже, что администраторы в dev.to только обновляет вашу статистику один раз в день, поэтому не нужно запускать сценарий более одного раза в день.

Сценарий находится в Python, и он делает следующее:

  • Прочитайте файл «devtoarticlestats.json», если он уже существует
  • Получите статистику статьи от DEV.TO API
  • Для каждой извлеченной статьи:
    • Если статья не существует во внутренней структуре, то создайте новый экземпляр и добавьте его к внутренней структуре.
    • Если статистика на сегодня уже существует обновление их с полученными данными, иначе создать новый экземпляр статистики на сегодняшний день.
  • Сохраните внутреннюю структуру в файл «devtoarticlestats.json» в формате JSON.

Теперь у вас есть данные в формате JSON, а затем решать вам, как вы хотите повеселиться с ним. Вы можете начать с визуализации данных:-)

Не забудьте создать запланированную задачу в планировщике Windows, планировщик CRON на Linux или «Что-то называемое» планировщиком на MacOS.

Это скрипт:

import requests
import json
import datetime
import dateutil.parser
from os import path
from typing import List

class ArticleStats(object):
    def __init__(self, date: str, page_views_count: int, public_reactions_count: int, comments_count: int):
        self.date = date
        self.page_views_count = page_views_count
        self.public_reactions_count = public_reactions_count
        self.comments_count = comments_count

class Article(object):
    def __init__(self, title: str, published: str, stats: List[ArticleStats] = []):
        self.title = title
        self.published = published
        self.stats = stats

class DevStats(object):
    def __init__(self, articles: List[Article]):
        self.articles = articles

    def toJSON(self):
        return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4)


url = "https://dev.to/api/articles/me"
headers = {
    'api-key': 'YOUR-PRIVATE-API-KEY-HERE', # You have to put your own api-key here. How to get a api-key: https://docs.dev.to/api/#section/Authentication/api_key
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36'
}

statsFilename = "devToArticleStats.json"
if(path.exists(statsFilename)): # If the statistics json file already exist then read it so we later can append the retrieved data to it
    statsFile = open(statsFilename, 'r')
    devToStatsJson = str(statsFile.read())
    statsFile.close()
else:
    devToStatsJson = '{ "articles": []  }'

devToJson = requests.get(url, headers=headers).json() # Call the api to retrieve the statustics
devToStatsDict = json.loads(devToStatsJson)
devToStats = DevStats(**devToStatsDict)

articleStats = ""
for articleFromDev in devToJson:
    publishedObj = dateutil.parser.isoparse(articleFromDev['published_at'])
    publishedStr = datetime.datetime.strftime(publishedObj, "%d-%m-%Y %H:%M:%S")
    title = articleFromDev['title']
    pageViews = articleFromDev['page_views_count']
    reactions = articleFromDev['public_reactions_count']
    comments = articleFromDev['comments_count']
    existingArticle = next((article for article in devToStats.articles if article['title'] == title), None) # Get the article from the dictionary if it exists else add a new instance
    if existingArticle == None:
      existingArticle = {'title': title, 'published': publishedStr, 'stats': []}
      devToStats.articles.append(existingArticle)

    today = str(datetime.date.today())
    articleStats = next((stats for stats in existingArticle['stats'] if stats['date'] == today), None)  # Get the stats for today from the dictionary if it exists else add a new instance
    if articleStats == None:
      articleStats = ArticleStats(today, pageViews, reactions, comments)
      existingArticle['stats'].append(articleStats)
    else:
      articleStats['page_views_count'] = pageViews
      articleStats['public_reactions_count'] = reactions
      articleStats['comments_count'] = comments

statsFile = open(statsFilename, 'w') # Save the article stats to the statistics json file 
statsFile.write(devToStats.toJSON())
statsFile.close()

Оригинал: “https://dev.to/coderallan/how-to-use-the-dev-to-api-to-fetch-your-article-statistics-3oba”