في هذا الريبو ، أقوم بجمع واستكشاف البيانات المتعلقة بالمسارات الواردة في مخططات Spotify. أبني على العمل الذي قمت به في هذا الريبو حيث فعلت بالفعل الكثير من الأشياء. لسوء الحظ ، كانت معالجة البيانات في هذا المشروع فوضوية حقًا ، لذلك قررت أن أبدأ من نقطة الصفر لإنشاء مجموعة بيانات أنظف.
لقد توصلت إلى البرامج النصية CLI لجلب البيانات المتعلقة بمخططات Spotify. يمكن العثور عليها في المجلد الفرعي cli_scripts
لهذا المشروع. كما يوحي اسم المجلد ، يمكن استدعاء جميع البرامج النصية مباشرة من سطر الأوامر. يمكنك استدعاء كل برنامج نصي مع خيار -h
للحصول على معلومات حول الوسائط المقبولة (مثال: python cli_scripts/get_all.py -h
).
أولاً ، توصلت إلى البرامج النصية لتجميع البيانات لمسارات Spotify Daily Top 200. لسوء الحظ ، هذه البيانات غير متوفرة عبر API. علاوة على ذلك ، يتعين على المرء تنزيل ملفات الرسم البياني CSV لكل منطقة وتتبعها بشكل منفصل (من خلال التنقل إلى صفحة Spotify Charts والنقر فوق زر التنزيل) وهو أمر غير مريح للغاية.
ومع ذلك ، عملت حول هذا من خلال إنشاء نصين (انظر المجلد الفرعي spotify_charts
):
download.py
: أتمتة عملية تنزيل ملفات المخططات CSV لعدة مناطق (إما جميع أو مجموعة فرعية محددة عبر الوسيطات) ونطاق تاريخ معين (تاريخ البدء + نهاية) باستخدام selenium
(يتطلب بيانات الحساب/الاعتماد Spotify!)combine_charts.py
: يجمع بين ملفات Spotify Chart CSV الموجودة في الدليل المحدد في ملف .parquet
واحد يمكن أيضًا استرداد الكثير من المعلومات المثيرة للاهتمام والبيانات الوصفية حول الموسيقى على Spotify من واجهة برمجة تطبيقات Spotify الرسمية. يمكن العثور على جميع البرامج النصية التي تستخدم API Spotify (عبر مجموعة spotipy
Python API) في spotify_api
:
get_track_metadata.py
: تجلب البيانات الوصفية من نقطة نهاية API /tracks
لمعرفات المسار الفريدة المذكورة في ملف .parquet
المقدم. يخرج مجلد من العديد من ملفات metadata .parquet
get_album_metadata.py
: يفعل نفس الشيء على النحو الوارد أعلاه ، فقط للألبومات بدلاً من المسارات (باستخدام نقطة نهاية API /albums
)get_artist_metadata.py
: metadata الفنانين لجميع معرفات الفنان الفريدة من بين العديد من ملفات الإدخال (كل منها له عمود artists_id
) ، أيضًا تخزين البيانات الوصفية في مجلد مثل البرامج النصية الأخرى أعلاهget_all.py
: يجمع بين جميع البرامج النصية ، والحصول على بيانات التعريف أولاً ، ثم بيانات تعريف الألبوم لجميع الألبومات المرتبطة بالمسارات وأخيراً بيانات الفنانين لجميع فنانين المسارات والألبوم. لسوء الحظ ، لا تتوفر معلومات عن ائتمانات المسار (على وجه التحديد ، مؤلفي الأغاني والمنتجين) عبر API Spotify Public. ومع ذلك ، توصلت إلى وسيلة للتغلب على ذلك. يمكن للمرء استخراج رؤوس الطلب التي يتم استخدامها لطلبات محددة مقدمة من تطبيق Spotify Web ، على سبيل المثال ، عند فتح Show Credits
المنبثقة على صفحة المسار وإعادة استخدامها لتقديم طلبات أخرى إلى نقطة نهاية API (غير رسمية/داخلية).
يمكن استخدام هذا النهج ل
# download CSVs; might take a loooong time, can be interrupted and restarted/resumed later
python cli_scripts/spotify_charts/download.py -s 2022-01-01 -e 2022-12-31 -o data/scraper_downloads
# combine downloaded CSVs into single parquet file
python cli_scripts/spotify_charts/combine.py -o data/top200_2022
python cli_scripts/spotify_api/get_all.py -i data/top200_2022/charts.parquet
TODO: أضف الأمر المناسب بمجرد الانتهاء من البرامج النصية (جيدة بما فيه الكفاية)
لجعل كل شيء يعمل ، يمكنك اتباع هذه التعليمات (على افتراض أن لديك نسخة حديثة من Python مثبتة)
إذا كنت تريد ، يمكنك إنشاء بيئة جديدة ، على سبيل المثال مع conda
:
conda env create --name=spotify-charts-analysis
conda activate spotify-charts-analysis
لجعل جميع البرامج النصية تعمل خارج الصندوق ، يمكنك ببساطة تثبيت حزمة helpers
عن طريق التشغيل
pip install -e .
بدلاً من ذلك ، يمكنك بالطبع أيضًا تثبيت الحزم واحدًا تلو الآخر لأنك تواجه مشكلات تحاول تنفيذ الأشياء لول
يمكن أن تكون Track Lyrics على Spotify غير صحيحة ، حتى بالنسبة للأغاني الشهيرة إلى حد ما (على سبيل المثال هذا المسار الآلي الذي يحتوي على كلمات لسبب ما).