Discuss Scratch

Mario-098
Scratcher
100+ posts

Scratch APIに対して理解を深めるトピック

アカウントがbanされているかわかるAPIってありますか?
K-Orange
Scratcher
3 posts

Scratch APIに対して理解を深めるトピック

#241
他人が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": {
		・・・・・・・・・
	}
}
この中の“user”の中の“banned”にBANされているかが入っています。

Last edited by K-Orange (Aug. 5, 2023 10:54:42)

ito-noizi
Scratcher
100+ posts

Scratch APIに対して理解を深めるトピック

#241 (少し日を置きましたがScratch Wikiで見つけたので。)
ScratchWikiのアカウントブロックには

Scratch Wiki wrote:

アカウントがブロックされたことは、本人以外にはわからない。
とあるので、#242の投稿 のようにscratchsessionsidを取得しなければアカウントブロック(BAN)されたかは調べられません。
Mario-098
Scratcher
100+ posts

Scratch APIに対して理解を深めるトピック

#242 #243
ありがとうございます。
Yukihisa2022
Scratcher
1000+ posts

Scratch APIに対して理解を深めるトピック

スタジオのプロジェクト数、コメント数などを見られるAPIはありますか?
Sky_Thunder
Scratcher
100+ posts

Scratch APIに対して理解を深めるトピック

#245
https://api.scratch.mit.edu/studios/${studioid}
のstatsから確認できます。
ですが、この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}}
と表示され、commmentsとprojectsが100になっていることが分かります。(実際は100プロジェクト・100コメント以上あります。)
inoking
Scratcher
1000+ posts

Scratch APIに対して理解を深めるトピック

Sky_Thunder wrote:

ですが、このAPIはそれぞれの数(プロジェクト・コメントの数)が100を超えるとそれ以上の数は分かりません。(999個でも100と表示される)
ちょっとそれますが
お!これは API で取得できる情報を Scratch Web サイトのポリシーに合わせているのですね。
サイト上で非公開とされている情報でも API では取得できるものがあることに問題を感じています。
ぜひともすべての API においてそうしてもらいたいものです > Scratch チーム
Mario-098
Scratcher
100+ posts

Scratch APIに対して理解を深めるトピック

scratchAPIの変更によって非共有プロジェクトのjsonをAPIから取得することはできなくなりましたが、クラウド変数は取得できるんですね
https://clouddata.scratch.mit.edu/logs?projectid=884167739&limit=40&offset=0
ryugen0719
Scratcher
2 posts

Scratch APIに対して理解を深めるトピック

APIを使ってプロジェクトに使われているブロックの数を確認するこっとってできますか?(初心者です)
ito-noizi
Scratcher
100+ posts

Scratch APIに対して理解を深めるトピック

#249
共有されたプロジェクトならできます。projecttokenを取得し、project.jsonを取得することで、project.jsonを読み取り、ブロック数を取得できます。しかし、これはproject.jsonの書かれ方の知識がないと難しいと思いますし、共有されたプロジェクトのprojecttokenを取得するには
https://api.scratch.mit.edu/projects/プロジェクトID/
で、
{"project_token":"プロジェクトトークン"}
のような形で書かれています。project.jsonは
https://projects.scratch.mit.edu/プロジェクトID?token=プロジェクトトークン
で出てきます。これらは普通のGETリクエストなのでURLに貼り付けて行なえます。ブロック数を読み取る方法は私はあまり詳しくないのでこちらで聞くことをおすすめします。

Last edited by ito-noizi (Aug. 24, 2023 09:52:29)

newmomizi_txt
Scratcher
1000+ posts

Scratch APIに対して理解を深めるトピック

#250
project.jsonを取得する時の注意点です。(FirefoxとEdgeで検証。)
https://projects.scratch.mit.edu/プロジェクトID?token=プロジェクトトークン
の形だと、jsonファイルのダウンロードが行われます。
初期状態だと“885079265”のように、プロジェクトIDがそのままファイル名になります。自分で.jsonの拡張子を付け足さなければいけません。

それに対して、
https://projects.scratch.mit.edu/プロジェクトID/?token=プロジェクトトークン
とすると、jsonファイルがブラウザー内で開かれます。

Last edited by newmomizi_txt (Aug. 24, 2023 10:58:30)

B-T-1153
Scratcher
8 posts

Scratch APIに対して理解を深めるトピック

プロジェクトのクラウド変数を変えるようなAPIなどはありますか?たまにクリッカーゲームなどでとんでもない世界記録があったりするのですが。
Mario-098
Scratcher
100+ posts

Scratch APIに対して理解を深めるトピック

#252
apiというのか、あるにはあります
ito-noizi
Scratcher
100+ posts

Scratch APIに対して理解を深めるトピック

#252
クラウド変数ではWebSocketと言われるサーバーとユーザーをリアルタイムでつなげる処理を行っています。
そのWebSocketでの通信をプログラムを書いたりすることで、クラウド変数をかってに変更できます。
wss://clouddata.scratch.mit.edu/
というリクエストURLで行っています。しかし、そのように不正をするのはコミュニティーガイドラインの「誠実であること」に違反する可能性があります。
(もちろんクリッカーゲームなどでのとんでもない世界記録はプロジェクト自体のバグや、単純に連打しただけの可能性もあります。)
scnyan-Y
Scratcher
1 post

Scratch APIに対して理解を深めるトピック

hi-ro951
Scratcher
29 posts

Scratch APIに対して理解を深めるトピック

Scratch公式のAPIかわからないんですけど
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)
上記のコードで取得しようとすると
{}
と返ってくるのですが、URLを踏んだ時のようなJSONを返すにはどうしたらよいですか?
Sky_Thunder
Scratcher
100+ posts

Scratch APIに対して理解を深めるトピック

#256
(そのAPIはScratch APIではありませんが…)
scratchstats.comのドメイン下でのみ動作するようなので、CORSエラーの可能性が高いです。(scratchstats.com以外だと500番台エラーになる)
この場合は外部からそのAPIを取得する事はできません。(例外を除く)(参考:この記事の3の場合)
tabakenn
Scratcher
100+ posts

Scratch APIに対して理解を深めるトピック

scratchstats.com はサーバーにcloudflare を使っているようで、そこのantibot か何かに引っかかっているのかな? と思いました。
だから鬼みたいに偽装してリクエストしたら通ったのですが、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"))
hi-ro951
Scratcher
29 posts

Scratch APIに対して理解を深めるトピック

お二方ありがとうございます。やっぱり公式APIからかき集めるほうがいいんですね…
waon_kirby
Scratcher
20 posts

Scratch APIに対して理解を深めるトピック

いいのでしょうか。そもそもそのサイトが。それによる。

Powered by DjangoBB