Аналитический инструмент ScratchAPI: различия между версиями
Новая страница: «= Анализ сообщества Scratch через API = == Карточка проекта == ;Название проекта :Анализ профиля участника и студии в социальной сети Scratch с помощью открытого API ;Автор :Бойко Константин Константинович ;Группа :АДЭУ-221 ;Дисциплина :Работа с API социальных сетей и...» |
Нет описания правки |
||
| (не показано 9 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
= Анализ сообщества Scratch через API = | = Анализ сообщества Scratch через API = | ||
| Строка 19: | Строка 20: | ||
Цель проекта — показать, как использовать открытое API социальной сети Scratch для исследования цифрового сообщества «сообщества кода». | Цель проекта — показать, как использовать открытое API социальной сети Scratch для исследования цифрового сообщества «сообщества кода». | ||
В рамках проекта с помощью запросов к https://api.scratch.mit.edu собираются данные об отдельном участнике (например, | В рамках проекта с помощью запросов к https://api.scratch.mit.edu собираются данные об отдельном участнике (например, griffpatch) и одной студии, затем результаты визуализируются в виде UML‑диаграмм и используются для простого количественного анализа активности. | ||
== Цели проекта == | == Цели проекта == | ||
| Строка 38: | Строка 39: | ||
* '''Отчёт''' — данная вики‑страница, где приведён код запросов, примеры JSON и получившиеся диаграммы. | * '''Отчёт''' — данная вики‑страница, где приведён код запросов, примеры JSON и получившиеся диаграммы. | ||
Структура данных профиля и статистики пользователя: | |||
[[ | |||
[ | {{#mermaid: | ||
flowchart TB | |||
Profile["Profile"] | |||
Stats["Stats"] | |||
Profile --> Stats | |||
Profile_Details["📌 Profile Details:\n• username: griffpatch\n• id: 1882674\n• joined: 2012-10-24\n• country: United Kingdom"] | |||
Stats_Details["📊 Stats Details:\n• followers: 745K+\n• projects: 250+\n• views: 183M+"] | |||
Profile --- Profile_Details | |||
Stats --- Stats_Details | |||
class Profile,Stats fill:#4a76a8,stroke:#2c3e50,color:#fff,stroke-width:2px | |||
class Profile_Details,Stats_Details fill:#e3f2fd,stroke:#1976d2,stroke-width:1px | |||
}} | |||
== Описание работы скрипта == | == Описание работы скрипта == | ||
| Строка 75: | Строка 90: | ||
} | } | ||
</pre> | </pre> | ||
=== Получение данных студии === | === Получение данных студии === | ||
| Строка 83: | Строка 100: | ||
https://api.scratch.mit.edu/studios/ID/ | https://api.scratch.mit.edu/studios/ID/ | ||
</code> | </code> | ||
== Полный код проекта: Анализ Scratch API == | |||
<div style="background-color: #2d3748; color: #e2e8f0; padding: 20px; border-radius: 10px; margin: 20px 0; font-family: 'Courier New', monospace; font-size: 14px; overflow-x: auto;"> | |||
<source lang="python"> | |||
import requests | |||
import json | |||
# -------- 1. ЗАПРОСЫ К SCRATCH API -------- | |||
def get_user_data(username: str) -> dict | None: | |||
"""Получает данные пользователя Scratch (открытое API).""" | |||
url = f"https://api.scratch.mit.edu/users/{username}/" | |||
try: | |||
r = requests.get(url, timeout=10) | |||
if r.status_code == 200: | |||
data = r.json() | |||
# чуть нормализуем под себя | |||
data["join_date"] = data.get("history", {}).get("joined", "")[:10] | |||
data["country"] = data.get("profile", {}).get("country", "") | |||
return data | |||
print("API error:", r.status_code) | |||
return None | |||
except Exception as e: | |||
print("Request error:", e) | |||
return None | |||
def get_studio_data(studio_id: int) -> dict | None: | |||
"""Получает данные студии Scratch.""" | |||
url = f"https://api.scratch.mit.edu/studios/{studio_id}/" | |||
try: | |||
r = requests.get(url, timeout=10) | |||
if r.status_code == 200: | |||
return r.json() | |||
print("API error:", r.status_code) | |||
return None | |||
except Exception as e: | |||
print("Request error:", e) | |||
return None | |||
# -------- 2. PLANTUML ДЛЯ ПОЛЬЗОВАТЕЛЯ -------- | |||
def generate_plantuml_user(user: dict) -> str: | |||
""" | |||
Генерирует простой PlantUML под твой движок: | |||
только объявления class + note, без { } внутри. | |||
""" | |||
username = user.get("username", "N/A") | |||
uid = user.get("id", "N/A") | |||
join_date = user.get("join_date", "N/A") | |||
country = user.get("country", "N/A") | |||
diagram = "@startuml\n" | |||
diagram += "class Profile\n" | |||
diagram += "class Stats\n" | |||
diagram += "Profile --> Stats\n" | |||
diagram += "note right of Profile\n" | |||
diagram += f" username: {username}\n" | |||
diagram += f" id: {uid}\n" | |||
diagram += f" joined: {join_date}\n" | |||
diagram += f" country: {country}\n" | |||
diagram += "end note\n" | |||
diagram += "note right of Stats\n" | |||
diagram += " followers: 745K+ ' пример\n" | |||
diagram += " projects: 250+ ' пример\n" | |||
diagram += " views: 183M+ ' пример\n" | |||
diagram += "end note\n" | |||
diagram += "@enduml\n" | |||
return diagram | |||
# -------- 3. PLANTUML ДЛЯ СТУДИИ -------- | |||
def generate_plantuml_studio(studio: dict) -> str: | |||
"""Простая диаграмма для студии.""" | |||
sid = studio.get("id", "N/A") | |||
title = studio.get("title", "N/A") | |||
projects = studio.get("stats", {}).get("projects", 0) | |||
followers = studio.get("stats", {}).get("followers", 0) | |||
diagram = "@startuml\n" | |||
diagram += "class Studio\n" | |||
diagram += "note right of Studio\n" | |||
diagram += f" id: {sid}\n" | |||
diagram += f" title: {title}\n" | |||
diagram += f" projects: {projects}\n" | |||
diagram += f" followers: {followers}\n" | |||
diagram += "end note\n" | |||
diagram += "@enduml\n" | |||
return diagram | |||
# -------- 4. MAIN -------- | |||
if __name__ == "__main__": | |||
username = "griffpatch" | |||
studio_id = 107193 | |||
print("== Запрос к Scratch API ==") | |||
user = get_user_data(username) | |||
studio = get_studio_data(studio_id) | |||
print("\n== Данные пользователя (raw JSON) ==") | |||
print(json.dumps(user, indent=2, ensure_ascii=False)) | |||
print("\n== Данные студии (raw JSON) ==") | |||
print(json.dumps(studio, indent=2, ensure_ascii=False)) | |||
# генерим PlantUML | |||
user_puml = generate_plantuml_user(user) | |||
studio_puml = generate_plantuml_studio(studio) | |||
# сохраняем в файлы | |||
with open("scratch_user_plantuml.txt", "w", encoding="utf-8") as f: | |||
f.write(user_puml) | |||
with open("scratch_studio_plantuml.txt", "w", encoding="utf-8") as f: | |||
f.write(studio_puml) | |||
print("\n== PlantUML для пользователя ==") | |||
print(user_puml) | |||
print("\n== PlantUML для студии ==") | |||
print(studio_puml) | |||
print("\nСкопируй содержимое *.txt в PlantUML / вики и получишь диаграммы.") | |||
</source> | |||
</div> | |||
'''Как использовать:''' | |||
# Запуск | |||
python scratch_api_project.py | |||
# Результат: | |||
# 1. Два файла с PlantUML: scratch_user_plantuml.txt, scratch_studio_plantuml.txt | |||
# 2. Вывод в консоль: JSON-данные + готовый PlantUML код | |||
# 3. Скопируй PlantUML из файлов в https://www.plantuml.com/plantuml/uml/ | |||
Из ответа используются поля: | Из ответа используются поля: | ||
| Строка 96: | Строка 246: | ||
"id": 107193, | "id": 107193, | ||
"title": "name", | "title": "name", | ||
<pre> | |||
[[Категория:Работа с API]] | |||
Текущая версия от 20:59, 27 марта 2026
Анализ сообщества Scratch через API
Карточка проекта
- Название проекта
- Анализ профиля участника и студии в социальной сети Scratch с помощью открытого API
- Автор
- Бойко Константин Константинович
- Группа
- АДЭУ-221
- Дисциплина
- Работа с API социальных сетей и визуализация данных
- Статус проекта
- Выполнен
Введение
Цель проекта — показать, как использовать открытое API социальной сети Scratch для исследования цифрового сообщества «сообщества кода». В рамках проекта с помощью запросов к https://api.scratch.mit.edu собираются данные об отдельном участнике (например, griffpatch) и одной студии, затем результаты визуализируются в виде UML‑диаграмм и используются для простого количественного анализа активности.
Цели проекта
- Научиться формировать HTTP‑запросы к API социальной сети Scratch.
- Собрать основные данные о пользователе: идентификатор, дата регистрации, страна, краткая биография.
- Собрать данные о студии: название, количество проектов, подписчиков, комментариев.
- Представить результаты в виде PlantUML‑диаграмм (структура профиля и студии).
- Сделать краткий количественный анализ активности участника на основе открытых данных.
Структура проекта
Проект реализован на языке Python и состоит из следующих частей:
- Основной скрипт — отправка запросов к Scratch API, вывод сырых JSON‑данных и генерация PlantUML‑кода.
- Функции запроса — отдельные функции для получения данных пользователя и студии.
- Функции визуализации — генерация текста диаграмм PlantUML для профиля и студии.
- Отчёт — данная вики‑страница, где приведён код запросов, примеры JSON и получившиеся диаграммы.
Структура данных профиля и статистики пользователя:
Описание работы скрипта
Получение данных пользователя
Скрипт отправляет GET‑запрос по адресу:
https://api.scratch.mit.edu/users/USERNAME/
и сохраняет в переменные:
id— числовой идентификатор участника;username— имя пользователя;history.joined— дата регистрации (используется только дата, без времени);profile.country— страна;profile.bio— краткая биография.
Пример фрагмента JSON для пользователя griffpatch:
{
"id": 1882674,
"username": "griffpatch",
"history": {
"joined": "2012-10-24T12:59:31.000Z"
},
"profile": {
"country": "United Kingdom",
"bio": "Got hooked on coding when I was a kid..."
}
}
Получение данных студии
Для студии используется запрос вида:
https://api.scratch.mit.edu/studios/ID/
Полный код проекта: Анализ Scratch API
import requests
import json
# -------- 1. ЗАПРОСЫ К SCRATCH API --------
def get_user_data(username: str) -> dict | None:
"""Получает данные пользователя Scratch (открытое API)."""
url = f"https://api.scratch.mit.edu/users/{username}/"
try:
r = requests.get(url, timeout=10)
if r.status_code == 200:
data = r.json()
# чуть нормализуем под себя
data["join_date"] = data.get("history", {}).get("joined", "")[:10]
data["country"] = data.get("profile", {}).get("country", "")
return data
print("API error:", r.status_code)
return None
except Exception as e:
print("Request error:", e)
return None
def get_studio_data(studio_id: int) -> dict | None:
"""Получает данные студии Scratch."""
url = f"https://api.scratch.mit.edu/studios/{studio_id}/"
try:
r = requests.get(url, timeout=10)
if r.status_code == 200:
return r.json()
print("API error:", r.status_code)
return None
except Exception as e:
print("Request error:", e)
return None
# -------- 2. PLANTUML ДЛЯ ПОЛЬЗОВАТЕЛЯ --------
def generate_plantuml_user(user: dict) -> str:
"""
Генерирует простой PlantUML под твой движок:
только объявления class + note, без { } внутри.
"""
username = user.get("username", "N/A")
uid = user.get("id", "N/A")
join_date = user.get("join_date", "N/A")
country = user.get("country", "N/A")
diagram = "@startuml\n"
diagram += "class Profile\n"
diagram += "class Stats\n"
diagram += "Profile --> Stats\n"
diagram += "note right of Profile\n"
diagram += f" username: {username}\n"
diagram += f" id: {uid}\n"
diagram += f" joined: {join_date}\n"
diagram += f" country: {country}\n"
diagram += "end note\n"
diagram += "note right of Stats\n"
diagram += " followers: 745K+ ' пример\n"
diagram += " projects: 250+ ' пример\n"
diagram += " views: 183M+ ' пример\n"
diagram += "end note\n"
diagram += "@enduml\n"
return diagram
# -------- 3. PLANTUML ДЛЯ СТУДИИ --------
def generate_plantuml_studio(studio: dict) -> str:
"""Простая диаграмма для студии."""
sid = studio.get("id", "N/A")
title = studio.get("title", "N/A")
projects = studio.get("stats", {}).get("projects", 0)
followers = studio.get("stats", {}).get("followers", 0)
diagram = "@startuml\n"
diagram += "class Studio\n"
diagram += "note right of Studio\n"
diagram += f" id: {sid}\n"
diagram += f" title: {title}\n"
diagram += f" projects: {projects}\n"
diagram += f" followers: {followers}\n"
diagram += "end note\n"
diagram += "@enduml\n"
return diagram
# -------- 4. MAIN --------
if __name__ == "__main__":
username = "griffpatch"
studio_id = 107193
print("== Запрос к Scratch API ==")
user = get_user_data(username)
studio = get_studio_data(studio_id)
print("\n== Данные пользователя (raw JSON) ==")
print(json.dumps(user, indent=2, ensure_ascii=False))
print("\n== Данные студии (raw JSON) ==")
print(json.dumps(studio, indent=2, ensure_ascii=False))
# генерим PlantUML
user_puml = generate_plantuml_user(user)
studio_puml = generate_plantuml_studio(studio)
# сохраняем в файлы
with open("scratch_user_plantuml.txt", "w", encoding="utf-8") as f:
f.write(user_puml)
with open("scratch_studio_plantuml.txt", "w", encoding="utf-8") as f:
f.write(studio_puml)
print("\n== PlantUML для пользователя ==")
print(user_puml)
print("\n== PlantUML для студии ==")
print(studio_puml)
print("\nСкопируй содержимое *.txt в PlantUML / вики и получишь диаграммы.")
Как использовать:
- Запуск
python scratch_api_project.py
- Результат:
- 1. Два файла с PlantUML: scratch_user_plantuml.txt, scratch_studio_plantuml.txt
- 2. Вывод в консоль: JSON-данные + готовый PlantUML код
- 3. Скопируй PlantUML из файлов в https://www.plantuml.com/plantuml/uml/
Из ответа используются поля:
id,title,description;history.created,history.modified;stats.projects,stats.followers,stats.comments.
Пример фрагмента JSON:
{
"id": 107193,
"title": "name",
