ScratchConnect v4.5.2
Python Library to connect Scratch API and much more.
This library can show the statistics of Users, Projects, Studios, Forums and also connect and set cloud variables of a
project!
This library needs a Scratch account. Visit the Scratch Website: https://scratch.mit.edu/
You also need to have the Python programming language installed on your computer.
You need basic knowledge of Python. Using this library without the knowledge can be risky.
Installation
To install this library, just type pip install scratchconnect
in the terminal (Command Prompt)
OR
Run this Python program
import os
os.system('pip install scratchconnect')
If you still have troubles while installing then go
to this link
Documentation
Documentation is taking a bit longer to make. It will be ready soon...
Data Credits:
These are the people who made the APIs so that this library can take data:
I thank all these people.
- Owner (Sid72020123)
Creating a Simple Connection:
Following is a simple program to make a simple connection:
Note: Don't put the username and password as it is when you host or share the code with others. While hosting, you can
use environment variables and while sharing, you can remove the username and password values. This will help in keeping
the password and other important things secured.
import scratchconnect
user = scratchconnect.ScratchConnect("Username", "Password")
It will give an error if the username
or password
is invalid.
More Uses:
Note: Some of the functions below can be only used by the logged in Scratcher. To get the stats of other users see the User Connection Documentation
import scratchconnect
user = scratchconnect.ScratchConnect("Username", "Password")
user.id()
user.thumbnail_url()
user.messages_count()
user.messages(all=False, limit=20, offset=0, filter="all")
user.clear_messages()
user.my_stuff_projects(order="all", page=1, sort_by="")
user.work()
user.bio()
user.status()
user.joined_date()
user.country()
user.featured_data()
user.projects()
user.followers_count()
user.following_count()
user.total_views()
user.total_loves_count()
user.total_favourites_count()
user.following()
user.followers()
user.favourites()
user.toggle_commenting()
user.follow_user(username="Sid72020123")
user.unfollow_user(username="Sid72020123")
user.set_bio(content="Hi!")
user.set_work(content="Hi!")
user.all_data()
user.site_health()
user.site_news()
user.site_front_page_projects()
user.explore_projects(mode="trending", query="*")
user.explore_studios(mode="trending", query="*")
user.search_projects(mode="trending", search="*")
user.search_studios(mode="trending", search="*")
user.set_featured_project(project_id="1", label='featured_project')
user.user_follower_history()
user.comments(limit=5, page=1)
user.ocular_data()
user.aviate_data(code=False)
user.search_forum(q="Hi!", order="relevance", page=0)
user.update_data()
Connect a Scratch User:
To connect a Scratch User use the connect_user()
function. Use the following program to connect a Scratch User:
import scratchconnect
login = scratchconnect.ScratchConnect("Username", "Password")
user = login.connect_user(username="Sid72020123")
user.id()
user.thumbnail_url()
user.messages_count()
user.work()
user.bio()
user.status()
user.joined_date()
user.country()
user.featured_data()
user.projects()
user.followers_count()
user.following_count()
user.total_views_count()
user.total_loves_count()
user.total_favourites_count()
user.following()
user.followers()
user.favourites()
user.user_follower_history()
user.post_comment(content="Hi!")
user.report(field="")
user.reply_comment(content="Hi!", comment_id=1)
user.all_data()
user.comments(limit=5, page=1)
user.ocular_data()
user.aviate_data(code=False)
user.update_data()
Connect a Scratch Studio:
To connect a Scratch Studio use the connect_studio()
function. Use the following program to connect a Scratch Studio:
import scratchconnect
user = scratchconnect.ScratchConnect("Username", "Password")
studio = user.connect_studio(studio_id=1)
studio.id()
studio.title()
studio.host_id()
studio.description()
studio.visibility()
studio.is_public()
studio.is_open_to_all()
studio.are_comments_allowed()
studio.history()
studio.stats()
studio.thumbnail_url()
studio.add_project(project_id=1)
studio.remove_project(project_id=1)
studio.open_to_public()
studio.close_to_public()
studio.follow_studio()
studio.unfollow_studio()
studio.toggle_commenting()
studio.post_comment(content="Hi!")
studio.reply_comment(content="Hi!", comment_id=1)
studio.delete_comment()
studio.report_comment(comment_id=1)
studio.invite_curator(username="Sid72020123")
studio.accept_curator()
studio.promote_curator(username="Sid72020123")
studio.set_description(content="Hi!")
studio.set_title(content="Hi!")
studio.projects(all=False, limit=40, offset=0)
studio.comments(all=False, limit=40, offset=0)
studio.curators(all=False, limit=40, offset=0)
studio.managers(all=False, limit=40, offset=0)
studio.activity(all=False, limit=40, offset=0)
studio.all_data()
studio.update_data()
Connect a Scratch Project:
To connect a Scratch Project use the connect_project()
function. Use the following program to connect a Scratch
Project:
import scratchconnect
user = scratchconnect.ScratchConnect("Username", "Password")
project = user.connect_project(project_id=1)
project.author()
project.title()
project.notes()
project.instruction()
project.are_comments_allowed()
project.stats()
project.history()
project.remix_data()
project.visibility()
project.is_public()
project.is_published()
project.thumbnail_url()
project.assets_info()
project.scripts()
project.love()
project.unlove()
project.favourite()
project.unfavourite()
project.comments(all=False, limit=40, offset=0, comment_id=None)
project.remixes(all=False, limit=20, offset=0)
project.post_comment(content="Hi!")
project.reply_comment(content="Hi!", comment_id=1)
project.toggle_commenting()
project.turn_on_commenting()
project.turn_off_commenting()
project.report(category="", reason="")
project.unshare()
project.view()
project.set_thumbnail(file="")
project.delete_comment(comment_id=1)
project.report_comment(comment_id=1)
project.reply_comment(comment_id=1, content="Hi!")
project.set_title()
project.set_description()
project.set_instruction()
project.all_data()
project.update_data()
Want to access and set the cloud variables of an unshared project?
Use the Following Code:
Note: By accessing an unshared project, some data may not be accessible to this library so some data might not appear.
You can get the scripts and connect cloud variables of an unshared project.
import scratchconnect
user = scratchconnect.ScratchConnect("Username", "Password")
project = user.connect_project(project_id=1,
access_unshared=True)
Connect Cloud Variables of a Scratch Project:
To connect the cloud variables of a Scratch Project use the connect_cloud_variables()
function. Use the following
program to connect the cloud variables of a Scratch Project:
import scratchconnect
user = scratchconnect.ScratchConnect("Username", "Password")
project = user.connect_project(project_id=1)
variables = project.connect_cloud_variables()
variables.get_variable_data(limit=100, offset=0)
variables.get_cloud_variable_value(variable_name="Name", limit=100)
set = variables.set_cloud_variable(variable_name="Name", value=123)
if set:
print("Cloud Variable Updated!")
Connect Cloud Variables of Turbowarp:
To connect the cloud variables of a Turbowarp Project use the connect_turbowarp_cloud()
function. Use the following
program to connect the cloud variables of a Turbowarp Project:
Note: Turbowarp doesn't provide any features to get the data, etc. so you can't do some actions with Turbowarp as in
Scratch
Note: Use the acccess_unshared=True
parameter of the connect_project()
function to connect the Turbowarp
Project even if it is unshared on Scratch!
import scratchconnect
user = scratchconnect.ScratchConnect("Username", "Password")
project = user.connect_project(project_id=1)
tw_cloud = project.connect_turbowarp_cloud(
username="Username")
tw_cloud.set_cloud_variable(variable_name="Name", value=0)
tw_cloud.get_variable_data()
Error with Turbowarp Cloud?
Sometimes there may be an error with the Turbowarp Cloud. Some Basic Errors are:
1. I can't change the Cloud Variable Value
If you can't change the Turbowarp Cloud Variable value using scratchconnect then first check if your code is correct. If
the problem still exists try with this
URL: https://turbowarp.org/<project ID>?cloud_host=wss://clouddata.turbowarp.org
. Replace the project ID
with your project ID.
Encoding/Decoding Cloud Variables:
In Scratch
ScratchConnect v2.0+ has some good features to encode/decode a cloud variable! See some examples below:
ScratchConnect has a case-sensitive encoding/decoding system. For example both 'A' and 'a' are encoded/decoded
differently!
Go to this link for the Scratch version of Encoder/Decoder
Encoding/Decoding a string:
import scratchconnect
login = scratchconnect.ScratchConnect("Username", "Password")
project = login.connect_project(1)
variables = project.connect_cloud_variables()
encoded_string = variables.encode("Hi! This is a text!")
variables.set_cloud_variable(variable_name='Name', value=encoded_string)
variable_value = variables.get_cloud_variable_value(variable_name='Name')[0]
decoded_string = variables.decode(variable_value)
print("Encoded: ", encoded_string)
print("Decoded: ", decoded_string)
Encoding/Decoding a list:
import scratchconnect
login = scratchconnect.ScratchConnect("Username", "Password")
project = login.connect_project(1)
variables = project.connect_cloud_variables()
data = ['A', 'B', 'C']
encoded_string = variables.encode_list(data)
variables.set_cloud_variable(variable_name='Name', value=encoded_string)
variable_value = variables.get_cloud_variable_value(variable_name='Name')[0]
decoded_string = variables.decode_list(variable_value)
print("Encoded: ", encoded_string)
print("Decoded: ", decoded_string)
In Turbowarp
To encode/decode a string/list in Turbowarp, the syntax is same as to encode/decode in Scratch. See above
Connect a Scratch Forum:
To connect a Scratch Forum use the connect_forum_topic()
function. Use the following program to connect a Scratch
Forum:
import scratchconnect
user = scratchconnect.ScratchConnect("Username", "Password")
forum = user.connect_forum_topic(forum_id=1)
forum.id()
forum.title()
forum.category()
forum.closed()
forum.deleted()
forum.time()
forum.post_count()
forum.follow()
forum.unfollow()
forum.posts(page=1)
forum.ocular_reactions(post_id=123)
forum.topic_post_history(usernames="total", segment="1", range="30")
forum.update_data()
Cloud Events
If you want to handle various Cloud Events on Scratch, use the following code:
In Scratch:
import scratchconnect
login = scratchconnect.ScratchConnect("Username", "Password")
project = login.connect_project(1)
cloud = project.connect_cloud_variables()
event = cloud.create_cloud_event()
@event.on("connect")
def connect():
print("Connected Cloud!")
@event.on("set")
def set(data):
print("SET: ", data)
@event.on("create")
def create(data):
print("CREATE: ", data)
@event.on("delete")
def delete(data):
print("DELETE: ", data)
@event.on("disconnect")
def disconnect():
print("Disconnected from Cloud!")
event.start(update_time=1)
In Turbowarp:
Use the same method as in Scratch but this time connect the cloud of a project on Turbowarp
Cloud Storage
IMPORTANT NOTE: This feature is going to be discontinued in ScratchConect v5.0! Please use the new alternative feature: Cloud Requests.
This is a special feature in ScratchConnect which is used to make a cloud storage system. Some features are:
- Create a variable
- Set a variable
- Get a variable
- Delete a variable
- Delete all variables
- Wait for a given time
- Simple Syntax
Note: Maximum of 1024 characters can be set as a value to a variable. You can create any number of variables!
First, you need to put a sprite in your project. Go to this link and
click 'see inside'. There will be all the instructions.
To create a cloud storage in ScratchConnect use the code:
import scratchconnect
login = scratchconnect.ScratchConnect("Username", "Password")
project = login.connect_project(1)
cloud_storage = project.create_cloud_storage(file_name="data", rewrite_file=False, edit_access=[
'Sid72020123'],
all_access=False)
cloud_storage.start_cloud_loop(update_time=1,
print_requests=True)
Cookie Login
Sometimes, the Scratch API blocks the login from online IDEs like Replit, etc. To overcome the issue, ScratchConnect
v2.5 or above has a feature to login directly with cookie. Example:
How to get a cookie?
You can get your cookie values by logging in with ScratchConnect locally on your computer and use the login object as print(login.session_id)
to get the required cookie value. Copy the value and store it in environment variable if you are using an online IDE like Replit!
Note: Keep this values secured and use environment variables wherever necessary.
import scratchconnect
scratch_cookie = {
"Username": "Your username",
"SessionID": "Your SessionID",
}
login = scratchconnect.ScratchConnect(cookie=scratch_cookie)
Note: While running the above code, ScratchConnect will give a warning that some features might not work if the cookie
values are wrong. It's not an ERROR, it's a WARNING
Advanced
In case the login from username and password fails, ScratchConnect also has a feature to login with a cookie when the
login with username and password fails! You just have to pass the username and password value and also the cookie in the
ScratchConnect class. Also, you need to set the auto_cookie_login
variable to True
. Example Code:
import scratchconnect
scratch_cookie = {
"Username": "Your username",
"SessionID": "Your SessionID",
}
login = scratchconnect.ScratchConnect(username="USERNAME", password="PASSWORD",
cookie=scratch_cookie,
auto_cookie_login=True)
Using ScratchConnect without login
With ScratchConnect v3.1+, you can use it without login! Example code:
import scratchconnect
user = scratchconnect.ScratchConnect()
Note: If you login without a username and password, some features such as setting cloud variables, etc. may not work.
It will give you a warning when you use this library without login!
Terminal
ScratchConnect v3.0+ has a feature called "Terminal" in which a user can get the data of Scratch User, Studio and
Project in the Python console.
To use this feature, you need to install additional dependencies required, by
typing pip install scratchconnect[terminal]
in the command prompt/terminal. Then, see the example code:
import scratchconnect
login = scratchconnect.ScratchConnect("Username", "Password")
terminal = login.create_new_terminal()
terminal.start()
You can use many features in it. Just enter help
to see the list of commands after the terminal starts.
Charts
ScratchConnect v3.0+ has a feature called "Chart" in which a user can get the data of Scratch User, Studio and Project
in graphical format.
Note: This feature uses the library pyhtmlchart
to create graphs. Any other library can be used in later
versions.
To use this feature, you need to install additional dependencies required, by
typing pip install scratchconnect[chart]
in the command prompt/terminal
User Comparison Chart:
See the example code:
import scratchconnect
login = scratchconnect.ScratchConnect("Username", "Password")
chart = login.create_new_chart()
user_chart = chart.user_stats_chart(
usernames=["griffpatch", "Will_Wam", "ScratchCat"])
user_table = chart.user_stats_table(
usernames=["griffpatch", "Will_Wam", "ScratchCat"])
user_chart.open()
user_table.open()
To include only some required data in a chart or table, use the include_data
parameter of the chart or table
function and pass the value as list to get the required data.
Example: ['Messages Count', 'Follower Count', 'Following Count']
You can also use any one or more options from the following list:
['Username', 'Messages Count', 'Follower Count', 'Following Count', 'Total Loves',
'Total Favourites', 'Total Projects Count']
Studio Comparison Chart:
See the example code:
import scratchconnect
login = scratchconnect.ScratchConnect("Username", "Password")
chart = login.create_new_chart()
studio_chart = chart.studio_stats_chart(
studio_ids=[100, 101, 102])
studio_table = chart.studio_stats_table(
studio_ids=[100, 101, 102])
studio_chart.open()
studio_table.open()
To include only some required data in a chart or table, use the include_data
parameter of the chart or table
function and pass the value as list to get the required data.
Example: ['Comments Count', 'Followers Count', 'Managers Count']
You can also use any one or more options from the following list:
['Studio ID', 'Comments Count', 'Followers Count', 'Managers Count', 'Projects Count']
Project Comparison Chart:
See the example code:
import scratchconnect
login = scratchconnect.ScratchConnect("Username", "Password")
chart = login.create_new_chart()
project_chart = chart.project_stats_chart(
project_ids=[104, 105, 106])
project_table = chart.project_stats_table(
project_ids=[104, 105, 106])
project_chart.open()
project_table.open()
To include only some required data in a chart or table, use the include_data
parameter of the chart or table
function and pass the value as list to get the required data. Example: ['Views', 'Loves', 'Favourites']
You can also use any one or more options from the following list:
['Project ID', 'Views', 'Loves', 'Favourites', 'Remixes', 'Version', 'Costumes', 'Blocks',
'Variables', 'Assets']
User Follower History Chart:
See the example code:
import scratchconnect
login = scratchconnect.ScratchConnect("Username", "Password")
chart = login.create_new_chart()
c = chart.user_followers_history_chart(username="griffpatch")
t = chart.user_followers_history_table(username="griffpatch")
c.open()
t.open()
Using ScratchConnect in online IDEs like Replit
Using the ScratchConnect version 4.0.0+
, you can use this library even on some online IDEs like Replit!
But to keep your profile data safe, this supports only GET
requests and no cookie headers are passed to the proxy (which this feature uses).
You cannot perform any actions other than GET
, i.e., follow a user, post a comment, etc.
But cloud variables work as it is a websocket connection.
Remember to use environment variables to store your session ID if you are using this on an online IDE like Replit...
To use ScratchConnect in online IDEs like Replit, you need to get your session ID (see Cookie-Login section above) and the code like:
import scratchconnect
session_id = "<your session id here>"
cookie = {
"Username": "<your username>",
"SessionID": session_id
}
login = scratchconnect.ScratchConnect(online_ide_cookie=cookie)
Cloud Requests
This feature was first released in version 4.0.0
of the ScratchConnect Python Library.
Using this, you will be able to send any amount of data to-and-from your Python program and any Scratch Project.
The docs to use this feature are here
Projects made using ScratchConnect
To see the projects made using ScratchConnect, go to the
official ScratchConnect Projects Studio
Bug Reporting:
All Bugs to be reported on my Scratch Profile
or Github
Change Log:
- 19/06/2021(v0.0.0.1) - First made the library and updated it.
- 20/06/2021(v0.1) - Added many features.
- 21/06/2021(v0.1.9) - Bug fixes.
- 26/06/2021(v0.2.0) - Made Improvements and added new features.
- 27/06/2021(v0.2.6) - Bug Fixes and update and made the 'Studio' class.
- 03/07/2021(v0.4.5) - Added many functions and made the 'Project' class.
- 04/07/2021(v0.5.0) - Update.
- 05/07/2021(v0.5.1) - Updated the messages function.
- 06/07/2021(v0.6.0) - Updated CloudConnection.
- 08/07/2021(v0.7.5) - Updated CloudConnection.
- 10/07/2021(v0.7.5) - Updated CloudConnection, made the Forum class and added DocString.
- 13/07/2021(v0.9.7) - Added DocString.
- 14/07/2021(v0.9.0) - Bug Fixes.
- 15/07/2021(v1.0) - First Release!
- 18/07/2021(V1.1) - Made the 'studio.get_projects()'.
- 19/07/2021(v1.2) - Made the get comments, curators, managers of the studio
- 13/08/2021(v1.3) - Added the get comments function
- 14/08/2021(v1.4) - Updated the get messages function
- 17/08/2021(v1.5) - Made some bug fixes
- 18/09/2021(v1.7) - Made the ScratchConnect and User Classes fast and Improved methods
- 19/09/2021(v1.8) - Made the Studio Class Faster and Improved methods
- 25/09/2021(v1.8.5) - Updated the Project and User classes
- 02/10/2021(v2.0) - Updated the Cloud and Forum Class
- 10/10/2021(v2.0.1) - Fixed some cloud stuff
- 11/10/2021(v2.1) - Added some features to Forum Class
- 24/10/2021(v2.1.1) - Started making the scStorage Class
- 29/10/2021(v2.1.1.1) - Fixed set_bio() and set_work() and updated the scDataBase
- 30/10/2021(v2.2.5) - Updated the scStorage
- 31/10/2021(v2.2.7) - Updated the scStorage
- 25/11/2021(v2.3) - Updated the scStorage and CloudConnection
- 13/12/2021(v2.3.5) - Started making the TurbowarpCloudConnection feature and added some methods to it
- 14/12/2021(v2.4) - Updated and fixed mistakes in docs
- 09/01/2022(v2.4.1) - Code Fixes
- 25/01/2022(v2.4.2) - Added new Comment API
- 16/03/2022(v2.5) - Fixed login and added cookie login feature
- 26/03/2022(v2.6) - Added some more APIs
- 27/03/2022(v2.6.3) - Added the Scratch Terminal Feature
- 28/03/2022(v2.7.5) - Updated the Scratch Terminal Feature and added the Chart Feature
- 29/03/2022(v2.8) - Updated the Charts Feature
- 16/04/2022(v3.0) - Bug fixes and improvements
- 30/04/2022(v3.0.5) - Code fix
- 01/05/2022(v3.0.8) - Code fix and new features
- 07/05/2022(v3.0.9) - Code fix
- 12/05/2022(v3.1) - Updated the CloudConnection Class
- 04/06/2022(v3.2) - Updated the ScratchConnect, CloudStorage, etc. Class
- 05/06/2022(v3.3) - Updated the CloudEvents Class, etc
- 08/06/2022(v3.3.5) - Added colored messages, etc
- 11/06/2022(v3.4) - Updated and made the CloudStorage Feature faster
- 05/08/2022(v3.4.1) - Planed and added some features of Online IDE login
- 06/08/2022(v3.4.2) - Added the OnlineIDE feature to all the Scratch API based classes
- 08/08/2022(v3.4.5) - Planned the Cloud Requests feature
- 09/08/2022(v3.5) - Added some features to the Cloud Requests Class
- 13/08/2022(v3.5.1) - Added some methods to the TurbowarpCloudConnection and CloudRequests classes and updated them
- 14/08/2022(v3.5.6) - Updated the Cloud Requests Class
- 15/08/2022(v3.6.0) - Updated the Cloud Requests Class
- 16/08/2022(v3.6.0) - Updated the Cloud Requests Class and added some logs to the class
- 20/08/2022(v3.7) - Added more logs to the Requests Class
- 21/08/2022(v3.8) - Made the scImage Class
- 27/08/2022(v3.9) - Reduced the size of encoded Image
- 30/08/2022(v3.9.5) - Bug fixes and Improvements
- 24/09/2022(v3.9.6) - Bug fixes and Improvements
- 25/09/2022(v3.9.7) - Bug fixes and Improvements
- 26/09/2022(v3.9.9) - Fixed many bugs in scCloudRequests
- 14/12/2022(v4.0.0) - Fixed the arguments bug in the Cloud Requests feature
- 15/12/2022(v4.0.0) - Bug fixes and improvements in the Cloud Requests feature
- 24/15/2022(v4.1) - Bug fixes
- 10/02/2023(v4.5) - Updated the CloudRequests feature and made it faster
- 11/02/2023(v4.5) - First stable release of the Cloud Requests feature
- 13/02/2023(v4.5.2) - Bug fixes
Credits:
This library is made by @Sid72020123 on Scratch. Also, thanks to all
contributors.
Contributors:
The names of persons below are their Scratch Usernames.
Person | Role | Contribution |
---|
Sid72020123 | Owner | Made the library and most of its features |
Ankit_Anmol | Contributor | Fixed some things in the documentation and added some features |
Chiroyce | Contributor | Added some features and cleaned up some code |
god286 | Contributor | Fixed mistakes in the documentation |
mbrick2 | Contributor | Fixed Badge Consistency and added the Aviate status feature |
AidanER1 | Contributor | Updated the CloudConnection class and fixed some bugs |
Senievol | Idea | Gave the trick to make the encoded image data length much lower in Cloud Requests |
awesome-llama | Idea | Gave the trick to make the encoded image data length much lower in Cloud Requests |
PPPDUD | Contributor | Fixed mistakes in the documentation |
If I'm missing some people and their work in the contributors table, please contact Sid72020123 on Scratch