chunithm-scraper


Namechunithm-scraper JSON
Version 1.0.1 PyPI version JSON
download
home_pagehttps://github.com/taka-4602/ONGEKI.Net-CHUNITHM.Net-Scraper
SummaryA scraper for chunithm-net.com
upload_time2024-11-16 19:56:25
maintainerNone
docs_urlNone
authortaka4602
requires_python>=3.6
licenseNone
keywords chunithm
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ONGEKI.Net-CHUNITHM.Net-Scraper 
オンゲキ NET と チュウニズム NETから情報を取得するAPIラッパー、マイマイの予定はありません  
## インストール  
音擊  
```
pip install ongeki-scraper
```  
チュウニズム  
```
pip install chunithm-scraper
```
必須 : requests, bs4  
## セッションは1つまでしか作れません
他のブラウザーウィンドウなどでログインすると、今までのセッションは破棄されます  
## セッションは短命です
ユーザーIDとPHPセッションIDはすぐ死んでしまいます
## Webでできることしかできません 
あたりまえですが、無料アカウントでプレミアムアカウントの機能使ったりは無理です  
というかそもそもjson受け取れるようなAPIはなかったので100% Webスクレイピングです 
## まずは音撃から  
#### example_ongeki.py
```py
from ongeki_screper import ONGEKI

ongeki=ONGEKI("SEGA ID","パスワード")#SEGA IDとパスワードでログイン
print(ongeki.token,ongeki.user_id)#セッションの維持に必要なトークンとユーザーID !!ユーザーIDという名前なだけでランダムに変わるクッキーです!!
print(ongeki.name)#プレイヤー名
print(ongeki.plate)#プレートの文字
print(ongeki.rating,ongeki.raiting_max)#レート
print(ongeki.battle_point)#バトルポイント
print(ongeki.money,ongeki.money_total)#マニー
print(ongeki.leveling,ongeki.leveling_reincarnation)#レベルと転生回数
print(ongeki.icon)#アイコン画像
print(ongeki.character)#キャラクター画像
print(ongeki.course)#利用券
ongeki=ONGEKI(token=ongeki.token,user_id=ongeki.user_id)#トークンとユーザーIDでログインをスキップ
all_music=ongeki.get_all_music()#難易度別で全曲を取得
rating_music=ongeki.check_rating_music()#レーティング対象曲をすべて取得
print(rating_music.rating_new)#新曲枠
print(rating_music.rating_best)#ベスト枠
print(rating_music.rating_recent)#リーセント枠
print(rating_music.rating_candidate)#候補枠
check_rating_music=rating_music.rating_best[0]#ベスト枠はリストなので1番上を取得
score_detail=ongeki.music_score_details(check_rating_music["idx"])#idxが曲の詳細を取得するためのトークンみたいなもの
print(playlog_score_detail)
print(score_detail.music_title)#タイトル
print(score_detail.music_img)#ジャケットの画像
print(score_detail.music_artist)#アーティスト
print(score_detail.music_genre)#ジャンル
print(score_detail.music_enemy)#敵の情報
print(score_detail.MASTER_battle_score)#バトルスコア
print(score_detail.MASTER_technical_score)#テクニカルスコア
print(score_detail.MASTER_icon_technical_rank)#テクニカルランク
print(score_detail.MASTER_over_damage)#オーバダメージ
print(score_detail.MASTER_last_played)#最終プレイ日
history=ongeki.get_history()#プレイ履歴を取得
last_played=history[0]#プレイ履歴の1番上
playlog_score_detail=ongeki.playlog_score_details(last_played["idx"])#idxを使ってプレイ履歴の詳細を取得
print(playlog_score_detail)
print(playlog_score_detail.music_title)#タイトル
print(playlog_score_detail.music_img)#ジャケット画像
print(playlog_score_detail.music_difficulty)#難易度
print(playlog_score_detail.music_played)#プレイ日時
print(playlog_score_detail.music_battle_score)#バトルスコア
print(playlog_score_detail.music_technical_score)#テクニカルスコア
print(playlog_score_detail.music_over_damage)#オーバーダメージ
print(playlog_score_detail.max_combo)#コンボ数
print(playlog_score_detail.critical_break)#クリティカルブレイク
print(playlog_score_detail.ongeki_break)#ブレイク
print(playlog_score_detail.hit)#ヒット
print(playlog_score_detail.miss)#ミス
print(playlog_score_detail.damage)#ダメージ
print(playlog_score_detail.tap)#タップ
print(playlog_score_detail.hold)#ホールド
print(playlog_score_detail.side_tap)#サイドタップ
print(playlog_score_detail.side_hold)#サイドホールド
```  
#コメントに書いてある通り...  
### それ以外の返り値
##### レーティング対象曲 / プレイ履歴  
```
{'title': 'きゅうくらりん', 'level': '14', 'difficulty': 'Master', 'technical_score': '994,198', 'technical_score_int': 994198, 'idx': 'tD6VKJAiSJqbOH2pSJJjTON434ODt50u7C9krAwAFPPhowOm3tEW0atNrTgLAIWzQ7YaMdJxKOGOxp3urrR%2BtA%3D%3D'}
```
dictの中に簡易的な説明が入ってるので単にテクニカルスコアだけ知りたい場合、スコアの詳細を取得しなくてもだいじょうぶ  
##### 全曲
プレイ済み
```
'Cutter':{'idx': 'hEr/DTD/cn70Wlvr%2BQXFdJoAZQxOqZI6ohty6tyx8O4AhuqhZKYBKf5H8/prgd3Zh72wyfQG6oVFQqNuErzKcA%3D%3D', 'battle_score': '302.01%', 'over_damage': '9,752,464', 'technical_score': '1,003,145'}
```  
未プレイ  
```
'Recollect Lines':{'idx': 'G4LE%2BayGWh88q9ziJBDOyQuZRl088qgKmAFN0hAWbd5C/UEBmGISVIASZyJJpCqSovY7EODj6EjGbMUeal/zTw%3D%3D', 'battle_score': None, 'over_damage': None, 'technical_score': None}
```
dict in dictになっているため、```all_music["曲名"]``` でidxやスコアを確認できる  
#### スコア詳細
```
SCORE_DETAILS(MASTER_level='13+', MASTER_last_played='2024/11/11 20:28', MASTER_play_count='31', MASTER_over_damage='298.52%', MASTER_battle_score='9,730,844', MASTER_technical_score='998,888', MASTER_icon_battle_rank='https://ongeki-net.com/ongeki-mobile/img/music_icon_br_great.png?ver=1.45.0', MASTER_icon_technical_rank='https://ongeki-net.com/ongeki-mobile/img/music_icon_tr_ss.png?ver=1.45.0', MASTER_icon_bell='https://ongeki-net.com/ongeki-mobile/img/music_icon_fb.png', MASTER_icon_combo='https://ongeki-net.com/ongeki-mobile/img/music_icon_back.png', EXPERT_level='12', EXPERT_last_played='2024/09/26 19:03', EXPERT_play_count='17', EXPERT_over_damage='303.69%', EXPERT_battle_score='9,396,988', EXPERT_technical_score='1,007,995', EXPERT_icon_battle_rank='https://ongeki-net.com/ongeki-mobile/img/music_icon_br_excellent.png?ver=1.45.0', EXPERT_icon_technical_rank='https://ongeki-net.com/ongeki-mobile/img/music_icon_tr_sssplus.png?ver=1.45.0', EXPERT_icon_bell='https://ongeki-net.com/ongeki-mobile/img/music_icon_fb.png', EXPERT_icon_combo='https://ongeki-net.com/ongeki-mobile/img/music_icon_fc.png?ver=1.45.0', LUNATIC_level=None, LUNATIC_last_played=None, LUNATIC_play_count=None, LUNATIC_over_damage=None, LUNATIC_battle_score=None, LUNATIC_technical_score=None, LUNATIC_icon_battle_rank=None, LUNATIC_icon_technical_rank=None, LUNATIC_icon_bell=None, LUNATIC_icon_combo=None, music_img='https://ongeki-net.com/ongeki-mobile/img/music/c159c9bee6a1fb73.png', music_title='Cyaegha', music_genre='VARIETY', music_artist='USAO「Arcaea」', music_enemy='光 Lv.35')
```  
レベル別になってるので長い、プレイしていないレベルは```None```
#### プレイ履歴のスコア詳細  
```
SCORE_DETAILS(played='2024/11/11 20:34', music_img='https://ongeki-net.com/ongeki-mobile/img/music/5ab5414aa44d6a03.png', music_title='Knight Rider', music_battle_score='9,282,581', music_over_damage='323.16%', music_technical_score='986,641', max_combo='731', critical_break='1,149', ongeki_break='128', hit='39', miss='4', bell='117/117', damage='4', music_difficulty='Master', tap='95%', hold='99%', flick='99%', side_tap='96%', side_hold='100%')
```
こっちはブレイク数やタップの詳細なども取得できる  

## チュウニズム  
音撃とだいたい同じ...  
#### example_chunithm.py  
```py
from chunithm_scraper import CHUNITHM

chunithm=CHUNITHM("SEGA ID","パスワード")#SEGA IDとパスワードでログイン
print(chunithm.token,chunithm.php_sess_id)#セッションの維持に必要なトークンとPHPセッションID
print(chunithm.name)#プレイヤー名
print(chunithm.plate)#プレートの文字
print(chunithm.rating,chunithm.raiting_max)#レート
print(chunithm.money,chunithm.money_total)#通貨
print(chunithm.leveling,chunithm.leveling_reincarnation)#レベルと転生回数
print(chunithm.icon)#アイコン画像
print(chunithm.course)#利用券
chunithm=CHUNITHM(token=chunithm.token,php_sess_id=chunithm.php_sess_id)#トークンとPHPセッションIDでログインをスキップ
all_music=chunithm.get_all_music()#難易度別で全曲を取得
rating_music=chunithm.check_rating_music("Best")#レーティング対象曲を取得、Bestでベスト枠、Recentでリーセント枠、Nextで候補枠
print(rating_music)#ベスト枠
check_rating_music=rating_music[0]#ベスト枠の1番上を取得
rating_music=chunithm.check_rating_music("Recent")
print(rating_music)#リーセント枠
rating_music=chunithm.check_rating_music("Next")
print(rating_music)#候補枠
score_detail=chunithm.music_score_details(check_rating_music["idx"],check_rating_music["token"])#チュウニズムの曲詳細を取得するには、idxとtokenも必要になる
print(score_detail)
print(score_detail.music_title)#タイトル
print(score_detail.music_img)#ジャケットの画像
print(score_detail.music_artist)#アーティスト
print(score_detail.MASTER_score)#スコア
print(score_detail.MASTER_icon_rank)#ランクの画像
print(score_detail.MASTER_icon_clear)#クリアの画像
print(score_detail.MASTER_icon_combo)#フルコンボとかの画像
history=chunithm.get_history()#プレイ履歴を取得
last_played=history[0]#プレイ履歴の1番上
playlog_score_detail=chunithm.playlog_score_details(last_played["idx"],last_played["token"])#idxとトークンを使ってプレイ履歴の詳細を取得
print(playlog_score_detail)
print(playlog_score_detail.character)#キャラクター
print(playlog_score_detail.skill)#スキル
print(playlog_score_detail.music_img)#ジャケット画像
print(playlog_score_detail.music_difficulty)#難易度
print(playlog_score_detail.music_score)#スコア
print(playlog_score_detail.music_played)#プレイ日時
print(playlog_score_detail.max_combo)#コンボ数
print(playlog_score_detail.justice_critical)#ジャスティスクリティカル
print(playlog_score_detail.justice)#ジャスティス
print(playlog_score_detail.attack)#アタック
print(playlog_score_detail.miss)#ミス
print(playlog_score_detail.tap)#タップ
print(playlog_score_detail.hold)#ホールド
print(playlog_score_detail.slide)#スライド
print(playlog_score_detail.air)#エアー
print(playlog_score_detail.flick)#フリック
```  
これも#コメントで書いてある通り...  
### それ以外の返り値
##### レーティング対象曲 / プレイ履歴  
```
{'title': 'MEGALOVANIA', 'difficulty': 'Expert', 'score': '985,342', 'score_int': 985342, 'diff': '2', 'genre': '99', 'idx': '2137', 'token': 'fad775feb5e372ffa4b3d6c584422e3a'}
```
dictの中に簡易的な説明が入ってるので単にテクニカルスコアだけ知りたい場合、スコアの詳細を取得しなくてもだいじょうぶ  
##### 全曲
プレイ済み
```
'レーイレーイ':{'diff': '3', 'genre': '99', 'idx': '829', 'token': '86a3e43df22bd6b63fdd97b3a5db0f47', 'score': '918,394'}
```  
未プレイ  
```
'Radiance':{'diff': '3', 'genre': '99', 'idx': '2111', 'token': 'bfa9c3e9f184e546f542df469dfbb059', 'score': None}
```
dict in dictになっているため、```all_music["曲名"]``` でidxとtokenやスコアを確認できる  
#### スコア詳細
```
SCORE_DETAILS(MASTER_play_count=None, MASTER_score=None, MASTER_icon_rank=None, MASTER_icon_combo=None, MASTER_icon_clear=None, EXPERT_play_count='1回', EXPERT_score='985,342', EXPERT_icon_rank='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_rank_8.png', EXPERT_icon_combo='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_rank_8.png', EXPERT_icon_clear='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_clear.png', ULTIMA_play_count=None, ULTIMA_score=None, ULTIMA_icon_rank=None, ULTIMA_icon_combo=None, ULTIMA_icon_clear=None, music_img='https://new.chunithm-net.com/chuni-mobile/html/mobile/img/f7b116709baab037.jpg', music_title='MEGALOVANIA', music_artist='Toby Fox「UNDERTALE」')
```  
レベル別になってるので長い、プレイしていないレベルは```None```
#### プレイ履歴のスコア詳細  
```
SCORE_DETAILS(music_played='2024/11/11 20:46', music_img='https://new.chunithm-net.com/chuni-mobile/html/mobile/img/94e81ba6b24960b8.jpg', music_title='8OROCHI', music_score='990,754', music_difficulty='Expert', character='藤沢 柚子/デイドリーム・フェアリーズ', skill='オールガード【LMN】', max_combo='567', justice_critical='1,302', justice='122', attack='15', miss='19', tap='97.43%', hold='100.97%', slide='100.34%', air='100.84%', flick='0.00%', icon_clear='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_clear.png', icon_rank='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_rank_9.png', icon_combo='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_rank_9.png')
```
こっちは使用キャラクター、スキル、ジャスティスやエアーの詳細なども取得できる  
### もう少し知る
#### 音撃とチュウニズムでは取得できる情報にバラつきがある  
えーこれオンゲキ.netだと表示できるのにチュウニズム.netじゃ見れないのかーって項目はもちろんこのスクレイパーでも取得できないし、逆も当然そう  
#### idxやtokenは取得するごとに変わる
データベースに保存して再利用はできません
#### 忘れがちだけどメンテナンスの時は使えません
音撃は 4:00~7:00  
チュウニズムは 2:00~7:00  
### 余談  
Discordで使えるオンゲキ / チュウニズムのレート確認Bot作ったけど、かなりいい感じ  
https://x.com/TakeTakaAway/status/1857697088374714646  
![twitter](twitter.png)  
ただ100% WebスクレイピングなのでできることはWebとはまったく変わらないのが少し悲しい  
基本的にCLIで情報を確認するときなんかない (´;ω;`)  
せっかく情報が取得できるならレート計算機でもつけた方がいいかなと思ったり  
```py
def ongeki_rating(level:float, score:int):
    if score >= 1007500:
        return level + 2
    elif score >= 1000000:
        return round(level + 1.5 + (score - 1000000) / 15000, 2)
    elif score >= 990000:
        return round(level + 1 + (score - 990000) / 20000, 2)
    elif score >= 970000:
        return round(level + (score - 970000) / 20000, 2)
    else: #AAA以下の場合
        return round(level + (score - 970000) / 17500 ,2)
```
```py
def chunithm_rating(level:float, score:int):
    if score >= 1009000:
        return level + 2.15
    elif score >= 1007500:
        return round(level + 2.0 + (score - 1007500) // 100 * 0.0 ,2)
    elif score >= 1005000:
        return round(level + 1.5 + (score - 1005000) // 50 * 0.01 ,2)
    elif score >= 1000000:
        return round(level + 1.0 + (score - 1000000) // 100 * 0.01 ,2)
    elif score >= 990000:
        return round(level + 0.6 + (score - 990000) // 250 * 0.01 ,2)
    elif score >= 975000:
        return round(level + (score - 975000) // 250 * 0.01 ,2)
    elif score >= 950000: #AAA以下の場合
        return round(level - 1.5 ,2)
    elif score >= 925000:
        return round(level - 3.0 ,2)
    elif score >= 900000:
        return round(level - 5.0 ,2)
    elif score >= 800000:
        return round((level - 5.0) / 2 ,2)
    else:
        return 0
```  
レート計算の式はこんな感じ、曲レートがわかると到達可能レートも計算できるみたいなので  
```py
rate_all=[]
for best in rating_all.rating_best:
    rate_all.append(ongeki_rating(float(譜面定数),best["technical_score_int"]))
        
average = sum(rate_all) / len(rate_all)
reachable = round(average*0.75 + rate_all[0]*0.25, 2)
```  
これで到達可能レートが計算できるらしい、ただレベルはもちろん譜面定数が必要だけど。  
譜面定数はまた他のサイトをスクレイピングしてデータベースに保存して、そこから参照するしかない...  
## コンタクト  
Discord サーバー / https://discord.gg/aSyaAK7Ktm  
Discord ユーザー名 / .taka.   

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/taka-4602/ONGEKI.Net-CHUNITHM.Net-Scraper",
    "name": "chunithm-scraper",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": "chunithm",
    "author": "taka4602",
    "author_email": "takaka4602@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/d8/02/ccb42d5a8947bd3dfbc88a73d6348be3d2eb1614d1746749caa8a2ba51e9/chunithm_scraper-1.0.1.tar.gz",
    "platform": null,
    "description": "# ONGEKI.Net-CHUNITHM.Net-Scraper \r\n\u30aa\u30f3\u30b2\u30ad NET \u3068 \u30c1\u30e5\u30a6\u30cb\u30ba\u30e0 NET\u304b\u3089\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308bAPI\u30e9\u30c3\u30d1\u30fc\u3001\u30de\u30a4\u30de\u30a4\u306e\u4e88\u5b9a\u306f\u3042\u308a\u307e\u305b\u3093  \r\n## \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb  \r\n\u97f3\u64ca  \r\n```\r\npip install ongeki-scraper\r\n```  \r\n\u30c1\u30e5\u30a6\u30cb\u30ba\u30e0  \r\n```\r\npip install chunithm-scraper\r\n```\r\n\u5fc5\u9808 : requests, bs4  \r\n## \u30bb\u30c3\u30b7\u30e7\u30f3\u306f1\u3064\u307e\u3067\u3057\u304b\u4f5c\u308c\u307e\u305b\u3093\r\n\u4ed6\u306e\u30d6\u30e9\u30a6\u30b6\u30fc\u30a6\u30a3\u30f3\u30c9\u30a6\u306a\u3069\u3067\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u3068\u3001\u4eca\u307e\u3067\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u306f\u7834\u68c4\u3055\u308c\u307e\u3059  \r\n## \u30bb\u30c3\u30b7\u30e7\u30f3\u306f\u77ed\u547d\u3067\u3059\r\n\u30e6\u30fc\u30b6\u30fcID\u3068PHP\u30bb\u30c3\u30b7\u30e7\u30f3ID\u306f\u3059\u3050\u6b7b\u3093\u3067\u3057\u307e\u3044\u307e\u3059\r\n## Web\u3067\u3067\u304d\u308b\u3053\u3068\u3057\u304b\u3067\u304d\u307e\u305b\u3093 \r\n\u3042\u305f\u308a\u307e\u3048\u3067\u3059\u304c\u3001\u7121\u6599\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u30d7\u30ec\u30df\u30a2\u30e0\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6a5f\u80fd\u4f7f\u3063\u305f\u308a\u306f\u7121\u7406\u3067\u3059  \r\n\u3068\u3044\u3046\u304b\u305d\u3082\u305d\u3082json\u53d7\u3051\u53d6\u308c\u308b\u3088\u3046\u306aAPI\u306f\u306a\u304b\u3063\u305f\u306e\u3067100% Web\u30b9\u30af\u30ec\u30a4\u30d4\u30f3\u30b0\u3067\u3059 \r\n## \u307e\u305a\u306f\u97f3\u6483\u304b\u3089  \r\n#### example_ongeki.py\r\n```py\r\nfrom ongeki_screper import ONGEKI\r\n\r\nongeki=ONGEKI(\"SEGA ID\",\"\u30d1\u30b9\u30ef\u30fc\u30c9\")#SEGA ID\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u30ed\u30b0\u30a4\u30f3\r\nprint(ongeki.token,ongeki.user_id)#\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u7dad\u6301\u306b\u5fc5\u8981\u306a\u30c8\u30fc\u30af\u30f3\u3068\u30e6\u30fc\u30b6\u30fcID !!\u30e6\u30fc\u30b6\u30fcID\u3068\u3044\u3046\u540d\u524d\u306a\u3060\u3051\u3067\u30e9\u30f3\u30c0\u30e0\u306b\u5909\u308f\u308b\u30af\u30c3\u30ad\u30fc\u3067\u3059!!\r\nprint(ongeki.name)#\u30d7\u30ec\u30a4\u30e4\u30fc\u540d\r\nprint(ongeki.plate)#\u30d7\u30ec\u30fc\u30c8\u306e\u6587\u5b57\r\nprint(ongeki.rating,ongeki.raiting_max)#\u30ec\u30fc\u30c8\r\nprint(ongeki.battle_point)#\u30d0\u30c8\u30eb\u30dd\u30a4\u30f3\u30c8\r\nprint(ongeki.money,ongeki.money_total)#\u30de\u30cb\u30fc\r\nprint(ongeki.leveling,ongeki.leveling_reincarnation)#\u30ec\u30d9\u30eb\u3068\u8ee2\u751f\u56de\u6570\r\nprint(ongeki.icon)#\u30a2\u30a4\u30b3\u30f3\u753b\u50cf\r\nprint(ongeki.character)#\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u753b\u50cf\r\nprint(ongeki.course)#\u5229\u7528\u5238\r\nongeki=ONGEKI(token=ongeki.token,user_id=ongeki.user_id)#\u30c8\u30fc\u30af\u30f3\u3068\u30e6\u30fc\u30b6\u30fcID\u3067\u30ed\u30b0\u30a4\u30f3\u3092\u30b9\u30ad\u30c3\u30d7\r\nall_music=ongeki.get_all_music()#\u96e3\u6613\u5ea6\u5225\u3067\u5168\u66f2\u3092\u53d6\u5f97\r\nrating_music=ongeki.check_rating_music()#\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u5bfe\u8c61\u66f2\u3092\u3059\u3079\u3066\u53d6\u5f97\r\nprint(rating_music.rating_new)#\u65b0\u66f2\u67a0\r\nprint(rating_music.rating_best)#\u30d9\u30b9\u30c8\u67a0\r\nprint(rating_music.rating_recent)#\u30ea\u30fc\u30bb\u30f3\u30c8\u67a0\r\nprint(rating_music.rating_candidate)#\u5019\u88dc\u67a0\r\ncheck_rating_music=rating_music.rating_best[0]#\u30d9\u30b9\u30c8\u67a0\u306f\u30ea\u30b9\u30c8\u306a\u306e\u30671\u756a\u4e0a\u3092\u53d6\u5f97\r\nscore_detail=ongeki.music_score_details(check_rating_music[\"idx\"])#idx\u304c\u66f2\u306e\u8a73\u7d30\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306e\u30c8\u30fc\u30af\u30f3\u307f\u305f\u3044\u306a\u3082\u306e\r\nprint(playlog_score_detail)\r\nprint(score_detail.music_title)#\u30bf\u30a4\u30c8\u30eb\r\nprint(score_detail.music_img)#\u30b8\u30e3\u30b1\u30c3\u30c8\u306e\u753b\u50cf\r\nprint(score_detail.music_artist)#\u30a2\u30fc\u30c6\u30a3\u30b9\u30c8\r\nprint(score_detail.music_genre)#\u30b8\u30e3\u30f3\u30eb\r\nprint(score_detail.music_enemy)#\u6575\u306e\u60c5\u5831\r\nprint(score_detail.MASTER_battle_score)#\u30d0\u30c8\u30eb\u30b9\u30b3\u30a2\r\nprint(score_detail.MASTER_technical_score)#\u30c6\u30af\u30cb\u30ab\u30eb\u30b9\u30b3\u30a2\r\nprint(score_detail.MASTER_icon_technical_rank)#\u30c6\u30af\u30cb\u30ab\u30eb\u30e9\u30f3\u30af\r\nprint(score_detail.MASTER_over_damage)#\u30aa\u30fc\u30d0\u30c0\u30e1\u30fc\u30b8\r\nprint(score_detail.MASTER_last_played)#\u6700\u7d42\u30d7\u30ec\u30a4\u65e5\r\nhistory=ongeki.get_history()#\u30d7\u30ec\u30a4\u5c65\u6b74\u3092\u53d6\u5f97\r\nlast_played=history[0]#\u30d7\u30ec\u30a4\u5c65\u6b74\u306e1\u756a\u4e0a\r\nplaylog_score_detail=ongeki.playlog_score_details(last_played[\"idx\"])#idx\u3092\u4f7f\u3063\u3066\u30d7\u30ec\u30a4\u5c65\u6b74\u306e\u8a73\u7d30\u3092\u53d6\u5f97\r\nprint(playlog_score_detail)\r\nprint(playlog_score_detail.music_title)#\u30bf\u30a4\u30c8\u30eb\r\nprint(playlog_score_detail.music_img)#\u30b8\u30e3\u30b1\u30c3\u30c8\u753b\u50cf\r\nprint(playlog_score_detail.music_difficulty)#\u96e3\u6613\u5ea6\r\nprint(playlog_score_detail.music_played)#\u30d7\u30ec\u30a4\u65e5\u6642\r\nprint(playlog_score_detail.music_battle_score)#\u30d0\u30c8\u30eb\u30b9\u30b3\u30a2\r\nprint(playlog_score_detail.music_technical_score)#\u30c6\u30af\u30cb\u30ab\u30eb\u30b9\u30b3\u30a2\r\nprint(playlog_score_detail.music_over_damage)#\u30aa\u30fc\u30d0\u30fc\u30c0\u30e1\u30fc\u30b8\r\nprint(playlog_score_detail.max_combo)#\u30b3\u30f3\u30dc\u6570\r\nprint(playlog_score_detail.critical_break)#\u30af\u30ea\u30c6\u30a3\u30ab\u30eb\u30d6\u30ec\u30a4\u30af\r\nprint(playlog_score_detail.ongeki_break)#\u30d6\u30ec\u30a4\u30af\r\nprint(playlog_score_detail.hit)#\u30d2\u30c3\u30c8\r\nprint(playlog_score_detail.miss)#\u30df\u30b9\r\nprint(playlog_score_detail.damage)#\u30c0\u30e1\u30fc\u30b8\r\nprint(playlog_score_detail.tap)#\u30bf\u30c3\u30d7\r\nprint(playlog_score_detail.hold)#\u30db\u30fc\u30eb\u30c9\r\nprint(playlog_score_detail.side_tap)#\u30b5\u30a4\u30c9\u30bf\u30c3\u30d7\r\nprint(playlog_score_detail.side_hold)#\u30b5\u30a4\u30c9\u30db\u30fc\u30eb\u30c9\r\n```  \r\n#\u30b3\u30e1\u30f3\u30c8\u306b\u66f8\u3044\u3066\u3042\u308b\u901a\u308a...  \r\n### \u305d\u308c\u4ee5\u5916\u306e\u8fd4\u308a\u5024\r\n##### \u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u5bfe\u8c61\u66f2 / \u30d7\u30ec\u30a4\u5c65\u6b74  \r\n```\r\n{'title': '\u304d\u3085\u3046\u304f\u3089\u308a\u3093', 'level': '14', 'difficulty': 'Master', 'technical_score': '994,198', 'technical_score_int': 994198, 'idx': 'tD6VKJAiSJqbOH2pSJJjTON434ODt50u7C9krAwAFPPhowOm3tEW0atNrTgLAIWzQ7YaMdJxKOGOxp3urrR%2BtA%3D%3D'}\r\n```\r\ndict\u306e\u4e2d\u306b\u7c21\u6613\u7684\u306a\u8aac\u660e\u304c\u5165\u3063\u3066\u308b\u306e\u3067\u5358\u306b\u30c6\u30af\u30cb\u30ab\u30eb\u30b9\u30b3\u30a2\u3060\u3051\u77e5\u308a\u305f\u3044\u5834\u5408\u3001\u30b9\u30b3\u30a2\u306e\u8a73\u7d30\u3092\u53d6\u5f97\u3057\u306a\u304f\u3066\u3082\u3060\u3044\u3058\u3087\u3046\u3076  \r\n##### \u5168\u66f2\r\n\u30d7\u30ec\u30a4\u6e08\u307f\r\n```\r\n'Cutter':{'idx': 'hEr/DTD/cn70Wlvr%2BQXFdJoAZQxOqZI6ohty6tyx8O4AhuqhZKYBKf5H8/prgd3Zh72wyfQG6oVFQqNuErzKcA%3D%3D', 'battle_score': '302.01%', 'over_damage': '9,752,464', 'technical_score': '1,003,145'}\r\n```  \r\n\u672a\u30d7\u30ec\u30a4  \r\n```\r\n'Recollect Lines':{'idx': 'G4LE%2BayGWh88q9ziJBDOyQuZRl088qgKmAFN0hAWbd5C/UEBmGISVIASZyJJpCqSovY7EODj6EjGbMUeal/zTw%3D%3D', 'battle_score': None, 'over_damage': None, 'technical_score': None}\r\n```\r\ndict in dict\u306b\u306a\u3063\u3066\u3044\u308b\u305f\u3081\u3001```all_music[\"\u66f2\u540d\"]``` \u3067idx\u3084\u30b9\u30b3\u30a2\u3092\u78ba\u8a8d\u3067\u304d\u308b  \r\n#### \u30b9\u30b3\u30a2\u8a73\u7d30\r\n```\r\nSCORE_DETAILS(MASTER_level='13+', MASTER_last_played='2024/11/11 20:28', MASTER_play_count='31', MASTER_over_damage='298.52%', MASTER_battle_score='9,730,844', MASTER_technical_score='998,888', MASTER_icon_battle_rank='https://ongeki-net.com/ongeki-mobile/img/music_icon_br_great.png?ver=1.45.0', MASTER_icon_technical_rank='https://ongeki-net.com/ongeki-mobile/img/music_icon_tr_ss.png?ver=1.45.0', MASTER_icon_bell='https://ongeki-net.com/ongeki-mobile/img/music_icon_fb.png', MASTER_icon_combo='https://ongeki-net.com/ongeki-mobile/img/music_icon_back.png', EXPERT_level='12', EXPERT_last_played='2024/09/26 19:03', EXPERT_play_count='17', EXPERT_over_damage='303.69%', EXPERT_battle_score='9,396,988', EXPERT_technical_score='1,007,995', EXPERT_icon_battle_rank='https://ongeki-net.com/ongeki-mobile/img/music_icon_br_excellent.png?ver=1.45.0', EXPERT_icon_technical_rank='https://ongeki-net.com/ongeki-mobile/img/music_icon_tr_sssplus.png?ver=1.45.0', EXPERT_icon_bell='https://ongeki-net.com/ongeki-mobile/img/music_icon_fb.png', EXPERT_icon_combo='https://ongeki-net.com/ongeki-mobile/img/music_icon_fc.png?ver=1.45.0', LUNATIC_level=None, LUNATIC_last_played=None, LUNATIC_play_count=None, LUNATIC_over_damage=None, LUNATIC_battle_score=None, LUNATIC_technical_score=None, LUNATIC_icon_battle_rank=None, LUNATIC_icon_technical_rank=None, LUNATIC_icon_bell=None, LUNATIC_icon_combo=None, music_img='https://ongeki-net.com/ongeki-mobile/img/music/c159c9bee6a1fb73.png', music_title='Cyaegha', music_genre='VARIETY', music_artist='USAO\u300cArcaea\u300d', music_enemy='\u5149 Lv.35')\r\n```  \r\n\u30ec\u30d9\u30eb\u5225\u306b\u306a\u3063\u3066\u308b\u306e\u3067\u9577\u3044\u3001\u30d7\u30ec\u30a4\u3057\u3066\u3044\u306a\u3044\u30ec\u30d9\u30eb\u306f```None```\r\n#### \u30d7\u30ec\u30a4\u5c65\u6b74\u306e\u30b9\u30b3\u30a2\u8a73\u7d30  \r\n```\r\nSCORE_DETAILS(played='2024/11/11 20:34', music_img='https://ongeki-net.com/ongeki-mobile/img/music/5ab5414aa44d6a03.png', music_title='Knight Rider', music_battle_score='9,282,581', music_over_damage='323.16\uff05', music_technical_score='986,641', max_combo='731', critical_break='1,149', ongeki_break='128', hit='39', miss='4', bell='117/117', damage='4', music_difficulty='Master', tap='95%', hold='99%', flick='99%', side_tap='96%', side_hold='100%')\r\n```\r\n\u3053\u3063\u3061\u306f\u30d6\u30ec\u30a4\u30af\u6570\u3084\u30bf\u30c3\u30d7\u306e\u8a73\u7d30\u306a\u3069\u3082\u53d6\u5f97\u3067\u304d\u308b  \r\n\r\n## \u30c1\u30e5\u30a6\u30cb\u30ba\u30e0  \r\n\u97f3\u6483\u3068\u3060\u3044\u305f\u3044\u540c\u3058...  \r\n#### example_chunithm.py  \r\n```py\r\nfrom chunithm_scraper import CHUNITHM\r\n\r\nchunithm=CHUNITHM(\"SEGA ID\",\"\u30d1\u30b9\u30ef\u30fc\u30c9\")#SEGA ID\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u30ed\u30b0\u30a4\u30f3\r\nprint(chunithm.token,chunithm.php_sess_id)#\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u7dad\u6301\u306b\u5fc5\u8981\u306a\u30c8\u30fc\u30af\u30f3\u3068PHP\u30bb\u30c3\u30b7\u30e7\u30f3ID\r\nprint(chunithm.name)#\u30d7\u30ec\u30a4\u30e4\u30fc\u540d\r\nprint(chunithm.plate)#\u30d7\u30ec\u30fc\u30c8\u306e\u6587\u5b57\r\nprint(chunithm.rating,chunithm.raiting_max)#\u30ec\u30fc\u30c8\r\nprint(chunithm.money,chunithm.money_total)#\u901a\u8ca8\r\nprint(chunithm.leveling,chunithm.leveling_reincarnation)#\u30ec\u30d9\u30eb\u3068\u8ee2\u751f\u56de\u6570\r\nprint(chunithm.icon)#\u30a2\u30a4\u30b3\u30f3\u753b\u50cf\r\nprint(chunithm.course)#\u5229\u7528\u5238\r\nchunithm=CHUNITHM(token=chunithm.token,php_sess_id=chunithm.php_sess_id)#\u30c8\u30fc\u30af\u30f3\u3068PHP\u30bb\u30c3\u30b7\u30e7\u30f3ID\u3067\u30ed\u30b0\u30a4\u30f3\u3092\u30b9\u30ad\u30c3\u30d7\r\nall_music=chunithm.get_all_music()#\u96e3\u6613\u5ea6\u5225\u3067\u5168\u66f2\u3092\u53d6\u5f97\r\nrating_music=chunithm.check_rating_music(\"Best\")#\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u5bfe\u8c61\u66f2\u3092\u53d6\u5f97\u3001Best\u3067\u30d9\u30b9\u30c8\u67a0\u3001Recent\u3067\u30ea\u30fc\u30bb\u30f3\u30c8\u67a0\u3001Next\u3067\u5019\u88dc\u67a0\r\nprint(rating_music)#\u30d9\u30b9\u30c8\u67a0\r\ncheck_rating_music=rating_music[0]#\u30d9\u30b9\u30c8\u67a0\u306e1\u756a\u4e0a\u3092\u53d6\u5f97\r\nrating_music=chunithm.check_rating_music(\"Recent\")\r\nprint(rating_music)#\u30ea\u30fc\u30bb\u30f3\u30c8\u67a0\r\nrating_music=chunithm.check_rating_music(\"Next\")\r\nprint(rating_music)#\u5019\u88dc\u67a0\r\nscore_detail=chunithm.music_score_details(check_rating_music[\"idx\"],check_rating_music[\"token\"])#\u30c1\u30e5\u30a6\u30cb\u30ba\u30e0\u306e\u66f2\u8a73\u7d30\u3092\u53d6\u5f97\u3059\u308b\u306b\u306f\u3001idx\u3068token\u3082\u5fc5\u8981\u306b\u306a\u308b\r\nprint(score_detail)\r\nprint(score_detail.music_title)#\u30bf\u30a4\u30c8\u30eb\r\nprint(score_detail.music_img)#\u30b8\u30e3\u30b1\u30c3\u30c8\u306e\u753b\u50cf\r\nprint(score_detail.music_artist)#\u30a2\u30fc\u30c6\u30a3\u30b9\u30c8\r\nprint(score_detail.MASTER_score)#\u30b9\u30b3\u30a2\r\nprint(score_detail.MASTER_icon_rank)#\u30e9\u30f3\u30af\u306e\u753b\u50cf\r\nprint(score_detail.MASTER_icon_clear)#\u30af\u30ea\u30a2\u306e\u753b\u50cf\r\nprint(score_detail.MASTER_icon_combo)#\u30d5\u30eb\u30b3\u30f3\u30dc\u3068\u304b\u306e\u753b\u50cf\r\nhistory=chunithm.get_history()#\u30d7\u30ec\u30a4\u5c65\u6b74\u3092\u53d6\u5f97\r\nlast_played=history[0]#\u30d7\u30ec\u30a4\u5c65\u6b74\u306e1\u756a\u4e0a\r\nplaylog_score_detail=chunithm.playlog_score_details(last_played[\"idx\"],last_played[\"token\"])#idx\u3068\u30c8\u30fc\u30af\u30f3\u3092\u4f7f\u3063\u3066\u30d7\u30ec\u30a4\u5c65\u6b74\u306e\u8a73\u7d30\u3092\u53d6\u5f97\r\nprint(playlog_score_detail)\r\nprint(playlog_score_detail.character)#\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\r\nprint(playlog_score_detail.skill)#\u30b9\u30ad\u30eb\r\nprint(playlog_score_detail.music_img)#\u30b8\u30e3\u30b1\u30c3\u30c8\u753b\u50cf\r\nprint(playlog_score_detail.music_difficulty)#\u96e3\u6613\u5ea6\r\nprint(playlog_score_detail.music_score)#\u30b9\u30b3\u30a2\r\nprint(playlog_score_detail.music_played)#\u30d7\u30ec\u30a4\u65e5\u6642\r\nprint(playlog_score_detail.max_combo)#\u30b3\u30f3\u30dc\u6570\r\nprint(playlog_score_detail.justice_critical)#\u30b8\u30e3\u30b9\u30c6\u30a3\u30b9\u30af\u30ea\u30c6\u30a3\u30ab\u30eb\r\nprint(playlog_score_detail.justice)#\u30b8\u30e3\u30b9\u30c6\u30a3\u30b9\r\nprint(playlog_score_detail.attack)#\u30a2\u30bf\u30c3\u30af\r\nprint(playlog_score_detail.miss)#\u30df\u30b9\r\nprint(playlog_score_detail.tap)#\u30bf\u30c3\u30d7\r\nprint(playlog_score_detail.hold)#\u30db\u30fc\u30eb\u30c9\r\nprint(playlog_score_detail.slide)#\u30b9\u30e9\u30a4\u30c9\r\nprint(playlog_score_detail.air)#\u30a8\u30a2\u30fc\r\nprint(playlog_score_detail.flick)#\u30d5\u30ea\u30c3\u30af\r\n```  \r\n\u3053\u308c\u3082#\u30b3\u30e1\u30f3\u30c8\u3067\u66f8\u3044\u3066\u3042\u308b\u901a\u308a...  \r\n### \u305d\u308c\u4ee5\u5916\u306e\u8fd4\u308a\u5024\r\n##### \u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u5bfe\u8c61\u66f2 / \u30d7\u30ec\u30a4\u5c65\u6b74  \r\n```\r\n{'title': 'MEGALOVANIA', 'difficulty': 'Expert', 'score': '985,342', 'score_int': 985342, 'diff': '2', 'genre': '99', 'idx': '2137', 'token': 'fad775feb5e372ffa4b3d6c584422e3a'}\r\n```\r\ndict\u306e\u4e2d\u306b\u7c21\u6613\u7684\u306a\u8aac\u660e\u304c\u5165\u3063\u3066\u308b\u306e\u3067\u5358\u306b\u30c6\u30af\u30cb\u30ab\u30eb\u30b9\u30b3\u30a2\u3060\u3051\u77e5\u308a\u305f\u3044\u5834\u5408\u3001\u30b9\u30b3\u30a2\u306e\u8a73\u7d30\u3092\u53d6\u5f97\u3057\u306a\u304f\u3066\u3082\u3060\u3044\u3058\u3087\u3046\u3076  \r\n##### \u5168\u66f2\r\n\u30d7\u30ec\u30a4\u6e08\u307f\r\n```\r\n'\u30ec\u30fc\u30a4\u30ec\u30fc\u30a4':{'diff': '3', 'genre': '99', 'idx': '829', 'token': '86a3e43df22bd6b63fdd97b3a5db0f47', 'score': '918,394'}\r\n```  \r\n\u672a\u30d7\u30ec\u30a4  \r\n```\r\n'Radiance':{'diff': '3', 'genre': '99', 'idx': '2111', 'token': 'bfa9c3e9f184e546f542df469dfbb059', 'score': None}\r\n```\r\ndict in dict\u306b\u306a\u3063\u3066\u3044\u308b\u305f\u3081\u3001```all_music[\"\u66f2\u540d\"]``` \u3067idx\u3068token\u3084\u30b9\u30b3\u30a2\u3092\u78ba\u8a8d\u3067\u304d\u308b  \r\n#### \u30b9\u30b3\u30a2\u8a73\u7d30\r\n```\r\nSCORE_DETAILS(MASTER_play_count=None, MASTER_score=None, MASTER_icon_rank=None, MASTER_icon_combo=None, MASTER_icon_clear=None, EXPERT_play_count='1\u56de', EXPERT_score='985,342', EXPERT_icon_rank='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_rank_8.png', EXPERT_icon_combo='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_rank_8.png', EXPERT_icon_clear='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_clear.png', ULTIMA_play_count=None, ULTIMA_score=None, ULTIMA_icon_rank=None, ULTIMA_icon_combo=None, ULTIMA_icon_clear=None, music_img='https://new.chunithm-net.com/chuni-mobile/html/mobile/img/f7b116709baab037.jpg', music_title='MEGALOVANIA', music_artist='Toby Fox\u300cUNDERTALE\u300d')\r\n```  \r\n\u30ec\u30d9\u30eb\u5225\u306b\u306a\u3063\u3066\u308b\u306e\u3067\u9577\u3044\u3001\u30d7\u30ec\u30a4\u3057\u3066\u3044\u306a\u3044\u30ec\u30d9\u30eb\u306f```None```\r\n#### \u30d7\u30ec\u30a4\u5c65\u6b74\u306e\u30b9\u30b3\u30a2\u8a73\u7d30  \r\n```\r\nSCORE_DETAILS(music_played='2024/11/11 20:46', music_img='https://new.chunithm-net.com/chuni-mobile/html/mobile/img/94e81ba6b24960b8.jpg', music_title='8OROCHI', music_score='990,754', music_difficulty='Expert', character='\u85e4\u6ca2 \u67da\u5b50\uff0f\u30c7\u30a4\u30c9\u30ea\u30fc\u30e0\u30fb\u30d5\u30a7\u30a2\u30ea\u30fc\u30ba', skill='\u30aa\u30fc\u30eb\u30ac\u30fc\u30c9\u3010LMN\u3011', max_combo='567', justice_critical='1,302', justice='122', attack='15', miss='19', tap='97.43%', hold='100.97%', slide='100.34%', air='100.84%', flick='0.00%', icon_clear='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_clear.png', icon_rank='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_rank_9.png', icon_combo='https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_rank_9.png')\r\n```\r\n\u3053\u3063\u3061\u306f\u4f7f\u7528\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u3001\u30b9\u30ad\u30eb\u3001\u30b8\u30e3\u30b9\u30c6\u30a3\u30b9\u3084\u30a8\u30a2\u30fc\u306e\u8a73\u7d30\u306a\u3069\u3082\u53d6\u5f97\u3067\u304d\u308b  \r\n### \u3082\u3046\u5c11\u3057\u77e5\u308b\r\n#### \u97f3\u6483\u3068\u30c1\u30e5\u30a6\u30cb\u30ba\u30e0\u3067\u306f\u53d6\u5f97\u3067\u304d\u308b\u60c5\u5831\u306b\u30d0\u30e9\u3064\u304d\u304c\u3042\u308b  \r\n\u3048\u30fc\u3053\u308c\u30aa\u30f3\u30b2\u30ad.net\u3060\u3068\u8868\u793a\u3067\u304d\u308b\u306e\u306b\u30c1\u30e5\u30a6\u30cb\u30ba\u30e0.net\u3058\u3083\u898b\u308c\u306a\u3044\u306e\u304b\u30fc\u3063\u3066\u9805\u76ee\u306f\u3082\u3061\u308d\u3093\u3053\u306e\u30b9\u30af\u30ec\u30a4\u30d1\u30fc\u3067\u3082\u53d6\u5f97\u3067\u304d\u306a\u3044\u3057\u3001\u9006\u3082\u5f53\u7136\u305d\u3046  \r\n#### idx\u3084token\u306f\u53d6\u5f97\u3059\u308b\u3054\u3068\u306b\u5909\u308f\u308b\r\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3057\u3066\u518d\u5229\u7528\u306f\u3067\u304d\u307e\u305b\u3093\r\n#### \u5fd8\u308c\u304c\u3061\u3060\u3051\u3069\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u306e\u6642\u306f\u4f7f\u3048\u307e\u305b\u3093\r\n\u97f3\u6483\u306f 4:00\uff5e7:00  \r\n\u30c1\u30e5\u30a6\u30cb\u30ba\u30e0\u306f 2:00\uff5e7:00  \r\n### \u4f59\u8ac7  \r\nDiscord\u3067\u4f7f\u3048\u308b\u30aa\u30f3\u30b2\u30ad / \u30c1\u30e5\u30a6\u30cb\u30ba\u30e0\u306e\u30ec\u30fc\u30c8\u78ba\u8a8dBot\u4f5c\u3063\u305f\u3051\u3069\u3001\u304b\u306a\u308a\u3044\u3044\u611f\u3058  \r\nhttps://x.com/TakeTakaAway/status/1857697088374714646  \r\n![twitter](twitter.png)  \r\n\u305f\u3060100% Web\u30b9\u30af\u30ec\u30a4\u30d4\u30f3\u30b0\u306a\u306e\u3067\u3067\u304d\u308b\u3053\u3068\u306fWeb\u3068\u306f\u307e\u3063\u305f\u304f\u5909\u308f\u3089\u306a\u3044\u306e\u304c\u5c11\u3057\u60b2\u3057\u3044  \r\n\u57fa\u672c\u7684\u306bCLI\u3067\u60c5\u5831\u3092\u78ba\u8a8d\u3059\u308b\u3068\u304d\u306a\u3093\u304b\u306a\u3044 (\u00b4\uff1b\u03c9\uff1b`)  \r\n\u305b\u3063\u304b\u304f\u60c5\u5831\u304c\u53d6\u5f97\u3067\u304d\u308b\u306a\u3089\u30ec\u30fc\u30c8\u8a08\u7b97\u6a5f\u3067\u3082\u3064\u3051\u305f\u65b9\u304c\u3044\u3044\u304b\u306a\u3068\u601d\u3063\u305f\u308a  \r\n```py\r\ndef ongeki_rating(level:float, score:int):\r\n    if score >= 1007500:\r\n        return level + 2\r\n    elif score >= 1000000:\r\n        return round(level + 1.5 + (score - 1000000) / 15000, 2)\r\n    elif score >= 990000:\r\n        return round(level + 1 + (score - 990000) / 20000, 2)\r\n    elif score >= 970000:\r\n        return round(level + (score - 970000) / 20000, 2)\r\n    else: #AAA\u4ee5\u4e0b\u306e\u5834\u5408\r\n        return round(level + (score - 970000) / 17500 ,2)\r\n```\r\n```py\r\ndef chunithm_rating(level:float, score:int):\r\n    if score >= 1009000:\r\n        return level + 2.15\r\n    elif score >= 1007500:\r\n        return round(level + 2.0 + (score - 1007500) // 100 * 0.0 ,2)\r\n    elif score >= 1005000:\r\n        return round(level + 1.5 + (score - 1005000) // 50 * 0.01 ,2)\r\n    elif score >= 1000000:\r\n        return round(level + 1.0 + (score - 1000000) // 100 * 0.01 ,2)\r\n    elif score >= 990000:\r\n        return round(level + 0.6 + (score - 990000) // 250 * 0.01 ,2)\r\n    elif score >= 975000:\r\n        return round(level + (score - 975000) // 250 * 0.01 ,2)\r\n    elif score >= 950000: #AAA\u4ee5\u4e0b\u306e\u5834\u5408\r\n        return round(level - 1.5 ,2)\r\n    elif score >= 925000:\r\n        return round(level - 3.0 ,2)\r\n    elif score >= 900000:\r\n        return round(level - 5.0 ,2)\r\n    elif score >= 800000:\r\n        return round((level - 5.0) / 2 ,2)\r\n    else:\r\n        return 0\r\n```  \r\n\u30ec\u30fc\u30c8\u8a08\u7b97\u306e\u5f0f\u306f\u3053\u3093\u306a\u611f\u3058\u3001\u66f2\u30ec\u30fc\u30c8\u304c\u308f\u304b\u308b\u3068\u5230\u9054\u53ef\u80fd\u30ec\u30fc\u30c8\u3082\u8a08\u7b97\u3067\u304d\u308b\u307f\u305f\u3044\u306a\u306e\u3067  \r\n```py\r\nrate_all=[]\r\nfor best in rating_all.rating_best:\r\n    rate_all.append(ongeki_rating(float(\u8b5c\u9762\u5b9a\u6570),best[\"technical_score_int\"]))\r\n        \r\naverage = sum(rate_all) / len(rate_all)\r\nreachable = round(average*0.75 + rate_all[0]*0.25, 2)\r\n```  \r\n\u3053\u308c\u3067\u5230\u9054\u53ef\u80fd\u30ec\u30fc\u30c8\u304c\u8a08\u7b97\u3067\u304d\u308b\u3089\u3057\u3044\u3001\u305f\u3060\u30ec\u30d9\u30eb\u306f\u3082\u3061\u308d\u3093\u8b5c\u9762\u5b9a\u6570\u304c\u5fc5\u8981\u3060\u3051\u3069\u3002  \r\n\u8b5c\u9762\u5b9a\u6570\u306f\u307e\u305f\u4ed6\u306e\u30b5\u30a4\u30c8\u3092\u30b9\u30af\u30ec\u30a4\u30d4\u30f3\u30b0\u3057\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3057\u3066\u3001\u305d\u3053\u304b\u3089\u53c2\u7167\u3059\u308b\u3057\u304b\u306a\u3044...  \r\n## \u30b3\u30f3\u30bf\u30af\u30c8  \r\nDiscord \u30b5\u30fc\u30d0\u30fc / https://discord.gg/aSyaAK7Ktm  \r\nDiscord \u30e6\u30fc\u30b6\u30fc\u540d / .taka.   \r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A scraper for chunithm-net.com",
    "version": "1.0.1",
    "project_urls": {
        "Homepage": "https://github.com/taka-4602/ONGEKI.Net-CHUNITHM.Net-Scraper"
    },
    "split_keywords": [
        "chunithm"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d802ccb42d5a8947bd3dfbc88a73d6348be3d2eb1614d1746749caa8a2ba51e9",
                "md5": "c64c3de2db843b7fa16e65dd89c04435",
                "sha256": "37c1b435f84dcf235dc702549ed411966a45a78a3c16531e1969588188061577"
            },
            "downloads": -1,
            "filename": "chunithm_scraper-1.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "c64c3de2db843b7fa16e65dd89c04435",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 15748,
            "upload_time": "2024-11-16T19:56:25",
            "upload_time_iso_8601": "2024-11-16T19:56:25.173346Z",
            "url": "https://files.pythonhosted.org/packages/d8/02/ccb42d5a8947bd3dfbc88a73d6348be3d2eb1614d1746749caa8a2ba51e9/chunithm_scraper-1.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-16 19:56:25",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "taka-4602",
    "github_project": "ONGEKI.Net-CHUNITHM.Net-Scraper",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "chunithm-scraper"
}
        
Elapsed time: 2.46506s