Discuss Scratch
- Discussion Forums
- » 日本語
- » Scratch APIに対して理解を深めるトピック
- K-Orange
-
3 posts
Scratch APIに対して理解を深めるトピック
#241
他人がBANされているかわかるAPIは僕が知る限りありませんが、ログインしているアカウントがBANされているか調べられる方法はあります。
ログイン状態で https://scratch.mit.edu/session にGETリクエストを送ると、次のようなJSONが返ってきます。
この中の“user”の中の“banned”にBANされているかが入っています。
他人がBANされているかわかるAPIは僕が知る限りありませんが、ログインしているアカウントがBANされているか調べられる方法はあります。
ログイン状態で https://scratch.mit.edu/session にGETリクエストを送ると、次のようなJSONが返ってきます。
{ "user" : { "id" : 12345678 , "banned" : "BANされているか" , "should_vpn" : "should_vpn" , "username" : "ユーザー名" , "token" : "トークン" , "thumbnailUrl" : "プロフィール画像のURL" , "dateJoined" : "参加日" , "email" : "メールアドレス" }, "permissions" : { ・・・・・・・・・ }, "flags" : { ・・・・・・・・・ } }
Last edited by K-Orange (Aug. 5, 2023 10:54:42)
- Sky_Thunder
-
100+ posts
Scratch APIに対して理解を深めるトピック
#245
のstatsから確認できます。
ですが、このAPIはそれぞれの数(プロジェクト・コメントの数)が100を超えるとそれ以上の数は分かりません。(999個でも100と表示される)
例えば このスタジオ であれば、
と表示され、commmentsとprojectsが100になっていることが分かります。(実際は100プロジェクト・100コメント以上あります。)
https://api.scratch.mit.edu/studios/${studioid}
ですが、このAPIはそれぞれの数(プロジェクト・コメントの数)が100を超えるとそれ以上の数は分かりません。(999個でも100と表示される)
例えば このスタジオ であれば、
{"id":26134440,"title":"Flashlight","host":15883188,"description":"In this studio we are creating projects that make use of a flashlight! \n\nLooking for suggestions on things to make? Here are a few ideas to help you get started:\n- A game that requires a flashlight to see where you are going\n- An animation of someone solving a mystery using a flashlight\n- A project that lets you design your own flashlight\n\nWhat will you create?\n","visibility":"visible","public":true,"open_to_all":false,"comments_allowed":true,"image":"https://cdn2.scratch.mit.edu/get_image/gallery/26134440_170x100.png","history":{"created":"2020-03-31T13:39:21.000Z","modified":"2020-03-31T14:11:36.000Z"},"stats":{"comments":100,"followers":1301,"managers":2,"projects":100}}
- inoking
-
1000+ posts
Scratch APIに対して理解を深めるトピック
ですが、このAPIはそれぞれの数(プロジェクト・コメントの数)が100を超えるとそれ以上の数は分かりません。(999個でも100と表示される)ちょっとそれますが
お!これは API で取得できる情報を Scratch Web サイトのポリシーに合わせているのですね。
サイト上で非公開とされている情報でも API では取得できるものがあることに問題を感じています。
ぜひともすべての API においてそうしてもらいたいものです > Scratch チーム
- Mario-098
-
100+ posts
Scratch APIに対して理解を深めるトピック
scratchAPIの変更によって非共有プロジェクトのjsonをAPIから取得することはできなくなりましたが、クラウド変数は取得できるんですね
https://clouddata.scratch.mit.edu/logs?projectid=884167739&limit=40&offset=0
https://clouddata.scratch.mit.edu/logs?projectid=884167739&limit=40&offset=0
- ryugen0719
-
2 posts
Scratch APIに対して理解を深めるトピック
APIを使ってプロジェクトに使われているブロックの数を確認するこっとってできますか?(初心者です)
- ito-noizi
-
100+ posts
Scratch APIに対して理解を深めるトピック
#249
共有されたプロジェクトならできます。projecttokenを取得し、project.jsonを取得することで、project.jsonを読み取り、ブロック数を取得できます。しかし、これはproject.jsonの書かれ方の知識がないと難しいと思いますし、 共有されたプロジェクト のprojecttokenを取得するには
で、
のような形で書かれています。project.jsonは
で出てきます。これらは普通のGETリクエストなのでURLに貼り付けて行なえます。ブロック数を読み取る方法は私はあまり詳しくないので こちら
で聞くことをおすすめします。
共有されたプロジェクトならできます。projecttokenを取得し、project.jsonを取得することで、project.jsonを読み取り、ブロック数を取得できます。しかし、これはproject.jsonの書かれ方の知識がないと難しいと思いますし、 共有されたプロジェクト のprojecttokenを取得するには
https://api.scratch.mit.edu/projects/プロジェクトID/
{"project_token":"プロジェクトトークン"}
https://projects.scratch.mit.edu/プロジェクトID?token=プロジェクトトークン
Last edited by ito-noizi (Aug. 24, 2023 09:52:29)
- newmomizi_txt
-
1000+ posts
Scratch APIに対して理解を深めるトピック
#250
project.jsonを取得する時の注意点です。(FirefoxとEdgeで検証。)
の形だと、jsonファイルのダウンロードが行われます。
初期状態だと“885079265”のように、プロジェクトIDがそのままファイル名になります。自分で.jsonの拡張子を付け足さなければいけません。
それに対して、
とすると、jsonファイルがブラウザー内で開かれます。
project.jsonを取得する時の注意点です。(FirefoxとEdgeで検証。)
https://projects.scratch.mit.edu/プロジェクトID?token=プロジェクトトークン
初期状態だと“885079265”のように、プロジェクトIDがそのままファイル名になります。自分で.jsonの拡張子を付け足さなければいけません。
それに対して、
https://projects.scratch.mit.edu/プロジェクトID/?token=プロジェクトトークン
Last edited by newmomizi_txt (Aug. 24, 2023 10:58:30)
- B-T-1153
-
8 posts
Scratch APIに対して理解を深めるトピック
プロジェクトのクラウド変数を変えるようなAPIなどはありますか?たまにクリッカーゲームなどでとんでもない世界記録があったりするのですが。
- ito-noizi
-
100+ posts
Scratch APIに対して理解を深めるトピック
#252
クラウド変数ではWebSocketと言われるサーバーとユーザーをリアルタイムでつなげる処理を行っています。
そのWebSocketでの通信をプログラムを書いたりすることで、クラウド変数をかってに変更できます。
というリクエストURLで行っています。しかし、そのように不正をするのはコミュニティーガイドラインの「誠実であること」に違反する可能性があります。
(もちろんクリッカーゲームなどでのとんでもない世界記録はプロジェクト自体のバグや、単純に連打しただけの可能性もあります。)
クラウド変数ではWebSocketと言われるサーバーとユーザーをリアルタイムでつなげる処理を行っています。
そのWebSocketでの通信をプログラムを書いたりすることで、クラウド変数をかってに変更できます。
wss://clouddata.scratch.mit.edu/
(もちろんクリッカーゲームなどでのとんでもない世界記録はプロジェクト自体のバグや、単純に連打しただけの可能性もあります。)
- hi-ro951
-
29 posts
Scratch APIに対して理解を深めるトピック
Scratch公式のAPIかわからないんですけど
https://scratchstats.com/api2/userstats/<username>
を
上記のコードで取得しようとすると
と返ってくるのですが、URLを踏んだ時のようなJSONを返すにはどうしたらよいですか?
https://scratchstats.com/api2/userstats/<username>
を
const url = "https://scratchstats.com/api2/userstats/<username>";
const response = await fetch(url);
const json = await response.json();
console.log(json)
{}
- tabakenn
-
100+ posts
Scratch APIに対して理解を深めるトピック
scratchstats.com はサーバーにcloudflare を使っているようで、そこのantibot か何かに引っかかっているのかな? と思いました。
だから鬼みたいに偽装してリクエストしたら通ったのですが、antibot が作動している以上IP ban とかもされかねないので、scratchstats.com は使わないほうが良いと思います。(本当にantibot のせいか分からないが、これ以上の検証は怖い…)
scratchstats.com はscratch api から収集したものを横流ししてるだけだと思うので、scratch 公式 api から情報を集めればいいと思います。
だから鬼みたいに偽装してリクエストしたら通ったのですが、antibot が作動している以上IP ban とかもされかねないので、scratchstats.com は使わないほうが良いと思います。(本当にantibot のせいか分からないが、これ以上の検証は怖い…)
scratchstats.com はscratch api から収集したものを横流ししてるだけだと思うので、scratch 公式 api から情報を集めればいいと思います。
def userstats(username: str):
headers = {
“Accept”:
“text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7”,
“Accept-Encoding”:
# “gzip, deflate, br”,
“gzip, deflate”,
“Accept-Language”:
“ja,en-US;q=0.9,en;q=0.8”,
“Sec-Ch-Ua”:
“\”Google Chrome\“;v=\”117\“, \”Not;A=Brand\“;v=\”8\“, \”Chromium\“;v=\”117\“”,
“Sec-Ch-Ua-Mobile”:
“?0”,
“Sec-Ch-Ua-Platform”:
“\”macOS\“”,
“Sec-Fetch-Dest”:
“document”,
“Sec-Fetch-Mode”:
“navigate”,
“Sec-Fetch-Site”:
“none”,
“Sec-Fetch-User”:
“?1”,
“Upgrade-Insecure-Requests”:
“1”,
“User-Agent”:
“Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36”,
}
request = requests.post(
f" https://scratchstats.com/api2/userstats/ {username}“, headers=headers)
request.raise_for_status()
return request.json()
print(userstats(”tabakenn"))