Мне было любопытно выяснить, сможете ли я получить количество просмотров, которые я создаю на сообществе 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”