Discuss Scratch
- Discussion Forums
- » 日本語
- » Scratch APIに対して理解を深めるトピック
- Sky_Thunder
-
Scratcher
100+ posts
Scratch APIに対して理解を深めるトピック
#258
なるほど!そのような場合があるのですね。とても勉強になります(こういう類のやつ大体CORSだと思ってた)
#259
(ついでというか、APIの用途が不明なので書いておきます)
Scratchドメイン下での公式API取得であればそのままで大丈夫なのですが、
もしScratchドメインじゃない所でAPIを使用する予定でしたら、TurbowarpのAPIがお勧めです(CORS起きないので)
なるほど!そのような場合があるのですね。とても勉強になります(こういう類のやつ大体CORSだと思ってた)
#259
(ついでというか、APIの用途が不明なので書いておきます)
Scratchドメイン下での公式API取得であればそのままで大丈夫なのですが、
もしScratchドメインじゃない所でAPIを使用する予定でしたら、TurbowarpのAPIがお勧めです(CORS起きないので)
https://trampoline.turbowarp.org/api/users/${username}https://trampoline.turbowarp.org/api/projects/${project_id}/https://trampoline.turbowarp.org/api/studios/${studio_id}/projects- hi-ro951
-
Scratcher
29 posts
Scratch APIに対して理解を深めるトピック
ユーザーのフォロワー数を取得するapiってありますか?
https://api.scratch.mit.edu/users/hi-ro951/followers/?limit=40&offset=0←を何度も繰り返して取得するようにしてもなぜか本来のフォロワー数より数十人多くなってしまいます。
あと、https://scratchdb.lefty.one/v3/user/info/<username>/で取得できる数値ってなんで減ったんですか?
https://api.scratch.mit.edu/users/hi-ro951/followers/?limit=40&offset=0←を何度も繰り返して取得するようにしてもなぜか本来のフォロワー数より数十人多くなってしまいます。
あと、https://scratchdb.lefty.one/v3/user/info/<username>/で取得できる数値ってなんで減ったんですか?
Last edited by hi-ro951 (Oct. 19, 2023 07:11:33)
- p_nuts
-
Scratcher
1000+ posts
Scratch APIに対して理解を深めるトピック
https://api.scratch.mit.edu/explore/projects から取得するできるデータと
https://api.scratch.mit.edu/projects/<id> で取得できるデータには
一部かけ離れている部分があるのですが、なぜでしょうか?
この挙動は明らかに変だと思います。
https://api.scratch.mit.edu/projects/<id> で取得できるデータには
一部かけ離れている部分があるのですが、なぜでしょうか?
{"visibility":"notvisible","public":false,"comments_allowed":false,"is_published":false,"remix":{"root":null}}
- ito-noizi
-
Scratcher
100+ posts
Scratch APIに対して理解を深めるトピック
#264
基本的に、GETリクエストではリクエストを送りすぎてエラーになるということはないはずです。
(前、ミスで一桁間違えて非同期で一度にユーザーの基本情報を得るAPIを500回リクエストしてしまいましたが、無事にデータは取れました。)
しかし、故意にあまりに多いリクエストを行うのはやはりスパムで、サーバーに負荷をかけようとしているようにしか思えないので、どのリクエストでもマナーとして、やめましょう。
基本的に、GETリクエストではリクエストを送りすぎてエラーになるということはないはずです。
(前、ミスで一桁間違えて非同期で一度にユーザーの基本情報を得るAPIを500回リクエストしてしまいましたが、無事にデータは取れました。)
しかし、故意にあまりに多いリクエストを行うのはやはりスパムで、サーバーに負荷をかけようとしているようにしか思えないので、どのリクエストでもマナーとして、やめましょう。
Last edited by ito-noizi (Dec. 1, 2023 11:52:20)
- Catapult-
-
Scratcher
100+ posts
Scratch APIに対して理解を深めるトピック
Google Apps Scriptを利用してScratchにログインしようとしています。
ログイン周りのAPIを調べてみたところ、
当たりが関係していそうだと思い、以下のコードを組みました。
最初にcsrfトークンを取得して、取得したトークンを使ってログインしています。sessionの意味は分かっていません。
しかし、コードを実行しても、間隔を開けているにもかかわらず429エラーが返ってきたり、レスポンスが
とログイン失敗したりしてしまいます。
・429エラーの原因
・ログイン失敗の原因
どちらかでもわかる方、教えてください。
ログイン周りのAPIを調べてみたところ、
https://scratch.mit.edu/csrf_token/
https://scratch.mit.edu/session
https://scratch.mit.edu/accounts/login/
function Login() { var response = UrlFetchApp.fetch("https://scratch.mit.edu/csrf_token/",); var cookies = response.getHeaders()["Set-Cookie"]; Logger.log(cookies.match(new RegExp("scratchcsrftoken"+'\=([^\;]*)\;*'))[1]); UrlFetchApp.fetch("https://scratch.mit.edu/session",); response = UrlFetchApp.fetch("https://scratch.mit.edu/accounts/login/", { headers: { "accept": "application/json", "content-type": "application/json", "x-csrftoken": cookies.match(new RegExp("scratchcsrftoken"+'\=([^\;]*)\;*'))[1], "X-Requested-With": "XMLHttpRequest" }, body: "{\"username\":\"<username>\",\"password\":\"<password>\",\"useMessages\":true}", method: "POST", }); Logger.log(response); }
しかし、コードを実行しても、間隔を開けているにもかかわらず429エラーが返ってきたり、レスポンスが
[{"username": "", "num_tries": 0, "success": 0, "msg": "Something went wrong", "messages": [], "id": null}]・429エラーの原因
・ログイン失敗の原因
どちらかでもわかる方、教えてください。
- ito-noizi
-
Scratcher
100+ posts
Scratch APIに対して理解を深めるトピック
#269
GASは、Scratchのデータを取得しようとすると、傾向の取得と参照数を増やすAPI、ログインはすべて、
のように出ました。
しかし、クラウド変数のログのAPIは問題なく取得できていました。
(今年の4月頃です。最近、クラウドモニターが不安定なのを考えると、メンテナンスとかで仕様が変わってる可能性はあります。)
また、参考までにReplitですが、「パスワードではログインできないが、セッションID使ってログインできる」と、別のSNSで何人かが話していました。(いまいちPythonはわからないので、詳しい情報持っている人がいたら教えてください。)
GASは、Scratchのデータを取得しようとすると、傾向の取得と参照数を増やすAPI、ログインはすべて、
{
"response": "Too many requests"
}しかし、クラウド変数のログのAPIは問題なく取得できていました。
https://clouddata.scratch.mit.edu/logs?projectid= プロジェクトID &limit= どこまで調べるか(100まで) &offset= どこから調べるか
また、参考までにReplitですが、「パスワードではログインできないが、セッションID使ってログインできる」と、別のSNSで何人かが話していました。(いまいちPythonはわからないので、詳しい情報持っている人がいたら教えてください。)
- tabakenn
-
Scratcher
100+ posts
Scratch APIに対して理解を深めるトピック
ユーザーネーム+パスワード → https://scratch.mit.edu/login/ → sessionID, x-token
x-token → https://api.scratch.mit.edu/projects/{projectId}?x-token={token} → project_info, project_token
project_token → https://projects.scratch.mit.edu/{projectId}?token={project_token} → project_json
sessionID → wss: //clouddata.scratch.mit.edu(scratchsessionsid={sessionId};)→ クラウド変数への接続
なので、/login がGAS をブロックしていてsessionID が取得できなくても、もともとsessionID を持っていればクラウド変数などに接続できるとかそういう話なのかな??
(もしsessionID から x-token を取得できるなら文字通りログインできるのですごい)
Last edited by tabakenn (Dec. 2, 2023 03:36:42)
- yu-yu0202
-
Scratcher
100+ posts
Scratch APIに対して理解を深めるトピック
勘違いのため削除
Last edited by yu-yu0202 (Dec. 2, 2023 06:29:51)
- Catapult-
-
Scratcher
100+ posts
Scratch APIに対して理解を深めるトピック
今、GASでscratchsessionsidによるログインを試みています。
tokenは取得できるのですが、scratchcsrftokenが取得できません。
ネットワークログを見てもいつの間にかcookieに入っており、レスポンスヘッダやレスポンスを見ても見つかりません。
どこから取得できるのでしょうか?
tokenは取得できるのですが、scratchcsrftokenが取得できません。
ネットワークログを見てもいつの間にかcookieに入っており、レスポンスヘッダやレスポンスを見ても見つかりません。
どこから取得できるのでしょうか?
- yu-yu0202
-
Scratcher
100+ posts
Scratch APIに対して理解を深めるトピック
Chromeの場合、F12→アプリケーション→Cookieで行けた…はずです。
追記 F11じゃなかったです
追記 F11じゃなかったです
Last edited by yu-yu0202 (Dec. 6, 2023 02:28:26)
- newmomizi_txt
-
Scratcher
1000+ posts
Scratch APIに対して理解を深めるトピック
#277
sessionidについて分かっているのは以下の2つです。
・Cookieを編集してsessionidをいじると、強制的にログアウトされた。
・「複数デバイスでログインすると片方が強制ログアウトされる」現象で、それが実際に発生したとき、sessionidが変わっていた。
このことから、「sessionidがサーバー側の値と一致しない場合、強制的にログアウトされる」という仕様があると推測できます(当たり前ですが)。
そして、私は数か月前からノートPCとデスクトップPCの両方でnewmomizi_txtのアカウントにログインしていますが、その間強制ログアウトは発生しなかったため、sessionidも変わっていないということになります。
結論としては、
「sessionidは何らかの要因により変わることもあるが、基本的には変わらないものと見なしても問題ない。変わったらその都度対応すればいい」
という感じです。
sessionidについて分かっているのは以下の2つです。
・Cookieを編集してsessionidをいじると、強制的にログアウトされた。
・「複数デバイスでログインすると片方が強制ログアウトされる」現象で、それが実際に発生したとき、sessionidが変わっていた。
このことから、「sessionidがサーバー側の値と一致しない場合、強制的にログアウトされる」という仕様があると推測できます(当たり前ですが)。
そして、私は数か月前からノートPCとデスクトップPCの両方でnewmomizi_txtのアカウントにログインしていますが、その間強制ログアウトは発生しなかったため、sessionidも変わっていないということになります。
結論としては、
「sessionidは何らかの要因により変わることもあるが、基本的には変わらないものと見なしても問題ない。変わったらその都度対応すればいい」
という感じです。
- InfinityServerSystem
-
Scratcher
1 post
Scratch APIに対して理解を深めるトピック
https://scratch.mit.edu/accounts/login/
の使い方を教えて下さい。
の使い方を教えて下さい。
- tabakenn
-
Scratcher
100+ posts
Scratch APIに対して理解を深めるトピック
/accounts/login/ を使用することで、sessionID とx-token という個人を表すキーを入手できます。(絶対に流出させてはダメ)
POST(ヘッダーとクッキー、JSON → クッキーとJSON)(ブラウザの検索バーから使用することはできません。)
https://scratch.mit.edu/accounts/login/ と、https://scratch.mit.edu/login/ は同じものらしいです。
ユーザーネーム+パスワード → https://scratch.mit.edu/accounts/login/ → sessionID, x-token
x-token → https://api.scratch.mit.edu/projects/{projectId}?x-token={token} → project_info, project_token
project_token → https://projects.scratch.mit.edu/{projectId}?token={project_token} → project_json
sessionID → wss: //clouddata.scratch.mit.edu(scratchsessionsid={sessionId};)→ クラウド変数への接続
POST(ヘッダーとクッキー、JSON → クッキーとJSON)(ブラウザの検索バーから使用することはできません。)
import json
import requests
# def login(username: str, password: str) -> (token: str, scratchsessionsid: str, scratchcsrftoken: str)
url = "https://scratch.mit.edu/accounts/login/“
headers = {
”x-csrftoken“: ”a“,
”x-requested-with“: ”XMLHttpRequest“,
”Cookie“: f”scratchcsrftoken=a;“,
”referer“: ”https://scratch.mit.edu“,
”user-agent“: ”“
}
data = json.dumps({
”username“: username,
”password“: password
})
response = requests.post(url, data=data, headers=headers)
if response.status_code == 403: # Forbidden
raise Exception(”Incorrect username or password.")
response.raise_for_status()
content = response.json()
cookie = response.headers
token = content
import re
scratchsessionsid = re.search(
“scratchsessionsid\”.*?\“);”, cookie).group(1)
scratchcsrftoken = re.search(
“scratchcsrftoken.*?);”, cookie).group(1)
https://scratch.mit.edu/accounts/login/ と、https://scratch.mit.edu/login/ は同じものらしいです。
Last edited by tabakenn (Dec. 6, 2023 05:10:53)
\”.*?\“);”, cookie).group(1)