MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
全て歌詞の所為です。は界隈曲をまとめたサイトです。
Translation pending
MediaPython · JavaScriptGitHub @izumin2000OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
界隈曲の情報をまとめたwebアプリ
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
全て歌詞の所為です。とは 『全て歌詞の所為です。』とは「界隈曲」と呼ばれる音楽ジャンルに焦点を当てた界隈曲情報掲載サイトです。 以下のような機能があります。 1\. 前提条件 gitコマンドとpythonコマンドが使えることが前提です。 pythonコマンドが未定義の場合、python3等のコマンドを用いてください。 pythonのvenvを利用して仮想環境.envを作成します。 ※ cpコマンドを利用できない場合は、別のファイルをコピーするコマンドかエクスプローラーを利用してください。 9\. 鍵の生成 以下のpythonコードを実行して鍵を生成します。 鍵の値はコピーしてください。 quit()実行時にエラーが出力されることがありますが、気にしなくて大丈夫です。 10\. local_settings.pyの設定 config/local_settings.pyを開き、コピーした値をSECRET_KEYに代入します。 12\. データベースの初期値の設定 マイグレーションした直後はデータベースにデータが入っておらずエラーになる処理がある為、以下のコマンドを実行して初期値を追加します。 初期値には全てあなたの所為です。の全曲と『12』・『15』・『17』が登録されています。Read the full README ↗
『全て歌詞の所為です。』とは「界隈曲」と呼ばれる音楽ジャンルに焦点を当てた界隈曲情報掲載サイトです。
以下のような機能があります。
1. 前提条件
gitコマンドとpythonコマンドが使えることが前提です。
pythonコマンドが未定義の場合、python3等のコマンドを用いてください。
2. クローン
git clone https://github.com/izumin2000/subekashi.git --depth 1
3. カレントディレクトリの変更
cd subekashi
4. 仮想環境の作成(必要に応じて)
pythonのvenvを利用して仮想環境.envを作成します。
python -m venv .env
5. 仮想環境の起動(必要に応じて)
@REM Windows PowerShell用
.env/Scripts/activate.ps1;
@REM Windows CMD用
.env\Scripts\activate.bat
# Linux用
source .env/bin/activate
6. ライブラリのインストール
pip install -r requirements.txt
7. local_setting.pyの作成
@REM Windows用
copy config/local_settings_sample.py config/local_settings.py
# Linux用
cp config/local_settings_sample.py config/local_settings.py
※ cpコマンドを利用できない場合は、別のファイルをコピーするコマンドかエクスプローラーを利用してください。
8. シェルの起動
python manage.py shell
9. 鍵の生成
以下のpythonコードを実行して鍵を生成します。
鍵の値はコピーしてください。
from django.core.management.utils import get_random_secret_key
get_random_secret_key()
quit()
quit()実行時にエラーが出力されることがありますが、気にしなくて大丈夫です。
10. local_settings.pyの設定
config/local_settings.pyを開き、コピーした値をSECRET_KEYに代入します。
SECRET_KEY = "=*************************************************"
11. マイグレーション
python manage.py makemigrations
python manage.py migrate
12. データベースの初期値の設定
マイグレーションした直後はデータベースにデータが入っておらずエラーになる処理がある為、以下のコマンドを実行して初期値を追加します。
python manage.py loaddata data.json
初期値には全てあなたの所為です。の全曲と『12』・『15』・『17』が登録されています。
13. 定数ファイルの作成(必要に応じて)
全て歌詞の所為です。では高頻度で変わる定数ファイルを.gitignore対象でsubekashi/constants/dynamicに保存しております。
必要に応じて以下のコマンドを実行して定数ファイルを生成してください。
python manage.py const
1. 仮想環境の起動(venvを利用している場合)
仮想環境.envを起動します。
@REM Windows PowerShell用
.env/Scripts/activate.ps1;
@REM Windows CMD用
.env\Scripts\activate.bat
# Linux用
source .env/bin/activate
2. サーバー起動
python manage.py runserver
3. アクセス
http://subekashi.localhost:8000/ にアクセスとアプリの画面が表示されます。
エラーが発生した場合はissueで報告してください。
全て歌詞の所為です。上で登録された情報はRESTfulなAPIで提供しています。
APIは全てのオリジンから利用できます(Access-Control-Allow-Origin: *)。Cookie等の認証情報を付けたクロスオリジンリクエストには対応していません。
エンドポイント: https://lyrics.imicomweb.com/api/song メソッド: GET, HEAD, OPTIONS レート制限: 2リクエスト/秒
全て歌詞の所為です。に登録された曲の情報を取得できます。
ユーザーが削除した曲は含まれません(/api/song/{song_id}で取得した場合も404になります)。
テキスト検索(部分一致、大文字小文字を区別しない)
title: タイトルで検索(最大500文字)author: 作者名で検索(最大500文字)lyrics: 歌詞で検索(最大10000文字)url: URLで検索(最大500文字)
keyword: タイトル、作者、歌詞、URLを横断検索(最大500文字)
完全一致検索
title_exact: タイトルで完全一致検索(最大500文字)author_exact: 作者名で完全一致検索(最大500文字)数値範囲フィルタ(1以上の値のみ)
view_gte: 視聴回数の下限(1以上の整数)view_lte: 視聴回数の上限(1以上の整数)like_gte: いいね数の下限(1以上の整数)like_lte: いいね数の上限(1以上の整数)日時範囲フィルタ
upload_time_gte: アップロード日時の下限(ISO 8601形式)upload_time_lte: アップロード日時の上限(ISO 8601形式)真偽値フィルタ
is_subeana: すべあな曲かどうかis_joke: ネタ曲かどうかis_draft: 下書きかどうかis_original: オリジナル模倣曲かどうかis_inst: インスト曲かどうかis_deleted: 動画が非公開/削除済みかどうかis_limited: すべかし内で限定公開かどうかis_special: スペシャルデザインの曲かどうかis_collab: 合作の曲(作者が2人以上の曲)かどうかis_lack: 不完全な曲(情報が欠けている曲)
True で不完全な曲のみ、False で不完全な曲を除外します(以前は False を指定しても絞り込まれませんでした)特殊フィルタ
imitate: 模倣元の曲のsong ID(整数)imitated: 被模倣の曲のsong ID(整数)guesser: 候補(タイトル・チャンネル・URLを検索、最大500文字)mediatypes: メディアタイプ(正規表現対応、最大100文字)ページネーション
page: ページ番号(デフォルト: 1、最小: 1)size: 1ページあたりの件数(デフォルト: 50、最小: 1)ソート
sort: ソート順を指定
id, -id, title, -title, author, -author, upload_time, -upload_time, view, -view, like, -like, post_time, -post_time, imitate_count, -imitate_count, imitated_count, -imitated_count, random-を付けると降順、付けないと昇順idは登録日時順(登録が古い順)、-idは登録が新しい順imitate_countは模倣元の数(その曲が模倣している曲の数)、imitated_countは模倣曲の数(その曲を模倣している曲の数)の順。数が同じ曲は登録が新しい順randomを指定するとランダムソート注意事項
mediatypesを指定しない限り、自動的にYouTube動画のみに絞り込まれます一覧取得時
{
"count": 100,
"page": 1,
"size": 50,
"max_page": 2,
"result": [
{
"id": 1,
"title": "タイトル",
"authors": [
{
"id": 1,
"name": "作者"
},
...
],
"url": [
"https://youtu.be/VIDEO-00000",
"https://youtu.be/VIDEO-00001"
],
...
}
]
}
count: 検索条件に一致する曲の総数page: 現在のページ番号size: 1ページあたりの件数max_page: 最大ページ数result: 曲のリスト個別取得時(/api/song/{song_id})
{
"id": 1,
"title": "タイトル",
"authors": [
{
"id": 1,
"name": "作者"
},
...
],
"url": [
"https://youtu.be/VIDEO-00000",
"https://youtu.be/VIDEO-00001"
],
...
}
urlフィールドについて
urlは登録されたURLの配列です。複数のURLが登録されている場合はすべて含まれます。URLが未登録の場合は空配列[]が返されます。
imitates / imitatedsフィールドについて
imitatesはこの曲が模倣している曲のsong IDの整数配列です。imitatedsはこの曲を模倣している曲のsong IDの整数配列(imitatesの逆参照)です。いずれも模倣関係がない場合は空配列[]が返されます。
エンドポイント: https://lyrics.imicomweb.com/api/ad メソッド: GET, HEAD, OPTIONS, PUT, PATCH
全て歌詞の所為です。に登録された宣伝の情報を取得・更新できます。
view(閲覧数)とclick(クリック数)フィールドのみ更新可能
エンドポイント: https://lyrics.imicomweb.com/api/ai メソッド: GET, HEAD, OPTIONS, PUT, PATCH
全て蛇の目の所為です。が作成した歌詞の情報を取得・更新できます。
score(評価スコア)フィールドのみ更新可能
メソッド: GET, HEAD, OPTIONS レート制限: 2リクエスト/秒
作者・プレラ・編集履歴などの情報を取得できます。/api/<名前>で一覧を、/api/<名前>/{id}で1件を取得します。並び順に記載が無いものはID順です。
| エンドポイント | 内容 | 絞り込み(完全一致) |
|---|---|---|
| /api/author | 作者。aliases(作者に登録された別名のname・alias_type)とlinks(リンクのURLの配列)を含む | なし |
| /api/prush | プレラ(プレミアラッシュ) | なし |
| /api/history | 編集履歴(新しい順) | song(song ID)、author(作者のID)、editor(編集者のID) |
| /api/contact | 回答済みのお問い合わせ(新しい順) | なし |
| /api/word | 全て蛇の目の所為です。の単語の入れ替え候補 | word、hinshi、katsuyou |
| /api/stats | 月ごとの統計(年・月の順) | songrange(all、subeana、xx) |
| /api/article | 記事(公開日時の新しい順)。/api/article/{article_id}で1件を取得 | tag |
ページネーション
page: ページ番号(デフォルト: 1、最小: 1)size: 1ページあたりの件数(デフォルト: 50、最小: 1、最大: 1000。1000を超える値は1000になります)一覧はSong APIと同じくcount・page・size・max_page・resultを返します。
注意事項
editorは編集者のIDです。編集履歴を非公開にしている編集者の場合はnullになり、その編集者のIDで絞り込んだ結果は空になりますユーザーが曲の編集画面の「削除」から送信すると、曲は論理削除され(Song.is_removedがTrue)、DBには残ります。
削除した曲は、検索・作者のページ・API等に表示されません。曲のページには、曲名と直近の削除理由、「削除を取り消す」ボタンが表示されます。
ユーザーは曲のページの「削除を取り消す」ボタンで復元できます。ただし、ロックされた曲と、曲のURLが削除していない他の曲に登録されている曲(削除している間に、その曲だけに紐づいていたURLが別の曲に登録された場合)は、ボタンが表示されず復元できません。
管理サイトで復元する場合は、次の手順で行います。
/admin/subekashi/song/)で、「is removed」を「はい」で絞り込む作者・URL・模倣関係は、削除前のまま戻ります。
管理サイトで復元する場合は、URLが他の曲に登録されていても復元できてしまい、そのURLが2曲に紐づくため、管理サイトのSongLinkで確かめてください。
python manage.py delete <song_id>を実行します。曲のURLは「削除された曲のURL」(SongLink.is_removedがTrue)になり、再び登録できなくなります。URLを登録できるままにする場合は、--keep-linksを付けます。
全て歌詞の所為です。ではプルリクエストを積極的に受け入れています。
主に以下のことをやっていただけると嬉しいです。
その他、issueの起票だけでも助かります。
マージの場所はmainでお願いします。
PRにはClaude Code Actionsを使用しております。
全て歌詞の所為です。ではXSS等の対策として、Content Security Policy(CSP)を設定しています(subekashi/middleware/csp.py)。
コードや記事を追加する際は以下に注意してください。
onclick・oninput等のイベントハンドラ属性は実行されません。JSの文字列で組み立ててinnerHTMLに入れるHTMLも同様です。addEventListenerで登録してください
data-tutorial="キー"、入力の変更時のフォームの送信は<form data-auto-submit>で行えます<script>にはnonce="{{ csp_nonce }}"を付けてください。srcで読み込むスクリプトには不要ですeval・new Function・setTimeout("文字列")・javascript:で始まるURLは使えませんsubekashi/middleware/csp.pyのCSP_DIRECTIVESにドメインを追加してくださいintegrity属性とcrossorigin="anonymous"を付けてくださいcsrftokenクッキーはJSから読み取れません。JSからPOST・PUT等を送るページでは、テンプレートに{% csrf_token %}を置き、getCSRF()でトークンを取得してくださいinput要素をまとめて取得する処理では、{% csrf_token %}が出力するhiddenのinputも含まれるため、必要に応じて:not([type="hidden"])で除外してください{% csrf_token %}を入れないでください(トークンがURLに含まれてしまうため)/api/以下のレスポンスは全てのサイトから読み取れます(Cookieは送られません)。他のサイトに読み取られて困る情報を/api/以下で返さないでくださいdjango.utils.html.escape()、JSではescapeHtml()でエスケープしてください。テンプレートで|safeを使う値にユーザーの入力値を含めないでください<script>には表示時に自動でnonceが付与されるため、そのまま実行されます。記事のHTMLに書いたonclick等は実行されないため、<script>内でaddEventListenerを使ってくださいarticle/static/article/image/に置いてくださいCSP_DIRECTIVESへの追加が必要ですテンプレート・静的JSにイベントハンドラ属性が含まれていると、subekashi/tests/test_security.pyのテストが失敗します。
本ソフトでは表示フォントに「源全角ゴ改」(https://drive.google.com/drive/folders/19WidrJoCmI5qLJV-eR_ydURIwxB2-DS) を使用しています。 Licensed under SIL Open Font License 1.1 http://scripts.sil.org/OFL © 2021 全て語り手の所為です。
本ソフトでは表示フォントに「Noto Sans JP」(https://fonts.google.com/selection?query=noto) を使用しています。 Licensed under SIL Open Font License 1.1 http://scripts.sil.org/OFL © 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'