diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-05-18 04:36:12 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-05-18 04:36:12 +0000 |
| commit | d1b9403cde14eba072c55355656eec0f130d95b3 (patch) | |
| tree | 1ea3c6bdf9cbaf7fbdf1e6879ee8db0df55c117b /python-scratchconnect.spec | |
| parent | 7f016c18696f6f21201180ad145100366276fb0e (diff) | |
automatic import of python-scratchconnect
Diffstat (limited to 'python-scratchconnect.spec')
| -rw-r--r-- | python-scratchconnect.spec | 2620 |
1 files changed, 2620 insertions, 0 deletions
diff --git a/python-scratchconnect.spec b/python-scratchconnect.spec new file mode 100644 index 0000000..5ef47e7 --- /dev/null +++ b/python-scratchconnect.spec @@ -0,0 +1,2620 @@ +%global _empty_manifest_terminate_build 0 +Name: python-scratchconnect +Version: 5.0 +Release: 1 +Summary: 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! +License: MIT +URL: https://github.com/Sid72020123/scratchconnect/ +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/17/b8/40dbb12a13e9c898b2a63a953ffe2969f3c84d7031b0cd5c9a8b96f7da03/scratchconnect-5.0.tar.gz +BuildArch: noarch + +Requires: python3-requests +Requires: python3-websocket-client +Requires: python3-Pillow +Requires: python3-scScratchTerminal + +%description +# 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/](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.** + + + + +[](https://pypi.org/project/scratchconnect/) + + + +### Installation + +To install this library, just type ```pip install scratchconnect``` in the terminal (Command Prompt) + +**OR** + +Run this Python program + +```python +import os + +os.system('pip install scratchconnect') +``` + +**If you still have troubles while installing then go +to [this link](https://packaging.python.org/tutorials/installing-packages/)** + +### 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: + +* [Scratch API](https://github.com/LLK/scratch-rest-api) by the Scratch Team +* [Scratch DB](https://scratchdb.lefty.one/) by [@DatOneLefty](https://scratch.mit.edu/users/DatOneLefty/) on Scratch +* [Scratch Comments API](https://github.com/Sid72020123/Scratch-Comments-API) + by [@Sid72020123](https://scratch.mit.edu/users/Sid72020123/) on Scratch +* [Simple Forum API](https://github.com/Sid72020123/Scratch-Forum) + by [@Sid72020123](https://scratch.mit.edu/users/Sid72020123/) on Scratch +* [Ocular API](https://ocular.jeffalo.net/) by [@Jeffalo](https://scratch.mit.edu/users/Jeffalo/) on Scratch +* [Aviate API](https://aviateapp.eu.org/) by [@NFlex23](https://scratch.mit.edu/users/NFlex23/) on Scratch + +``` +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.** + +```python +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 + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +user.id() # Returns the ID of the user +user.thumbnail_url() # Returns the thumbnail URL of a user +user.messages_count() # Returns the messages count of the user +user.messages(all=False, limit=20, offset=0, filter="all") # Returns the messages +user.clear_messages() # Clear your messages +user.my_stuff_projects(order="all", page=1, sort_by="") # Get/Sort mystuff projects +user.work() # Returns the 'What I am working on' of a Scratch profile +user.bio() # Returns the 'About me' of a Scratch profile +user.status() # Returns the status(Scratcher or New Scratcher) of a Scratch profile +user.joined_date() # Returns the joined date of a Scratch profile +user.country() # Returns the country of a Scratch profile +user.featured_data() # Returns the featured project data of the Scratch profile +user.projects() # Returns the list of shared projects of a user +user.followers_count() # Returns the follower count of a user +user.following_count() # Returns the following count of a user +user.total_views() # Returns the total views count of all the shared projects of a user +user.total_loves_count() # Returns the total loves count of all the shared projects of a user +user.total_favourites_count() # Returns the total favourites count of all the shared projects of a user +user.following() # Returns the list of the user following +user.followers() # Returns the list of the user followers +user.favourites() # Returns the list of the user favourites +user.toggle_commenting() # Toggle the commenting of the profile +user.follow_user(username="Sid72020123") # Follow a user +user.unfollow_user(username="Sid72020123") # UnFollow a user +user.set_bio(content="Hi!") # Set the bio or 'About Me' of the profile +user.set_work(content="Hi!") # Set the status or 'What I am Working On' of the profile +user.all_data() # Returns all the data of the user +user.site_health() # Returns the health of the Scratch Website. +user.site_news() # Returns the news of the Scratch Website. +user.site_front_page_projects() # Returns the front page projects of the Scratch Website. +user.explore_projects(mode="trending", query="*") # Explore the projects +user.explore_studios(mode="trending", query="*") # Explore the studios +user.search_projects(mode="trending", search="*") # Search the projects +user.search_studios(mode="trending", search="*") # Search the studios +user.set_featured_project(project_id="1", label='featured_project') # Set the 'Featured Project' of a Scratch Profile +user.user_follower_history() # Return the follower history of the user +user.comments(limit=5, page=1) # Get comments of the profile of the user +user.ocular_data() # Returns the ocular data of the user +user.aviate_data(code=False) # Returns the Aviate Status of the user +user.search_forum(q="Hi!", order="relevance", page=0) # Search the forum +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +user.update_data() # Update the data +``` + +### Connect a Scratch User: + +To connect a Scratch User use the `connect_user()` function. Use the following program to connect a Scratch User: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +user = login.connect_user(username="Sid72020123") +user.id() # Returns the ID of the user +user.thumbnail_url() # Returns the thumbnail URL of a user +user.messages_count() # Returns the messages count of the user +user.work() # Returns the 'What I am working on' of a Scratch profile +user.bio() # Returns the 'About me' of a Scratch profile +user.status() # Returns the status(Scratcher or New Scratcher) of a Scratch profile +user.joined_date() # Returns the joined date of a Scratch profile +user.country() # Returns the country of a Scratch profile +user.featured_data() # Returns the featured project data of the Scratch profile +user.projects() # Returns the list of shared projects of a user +user.followers_count() # Returns the follower count of a user +user.following_count() # Returns the following count of a user +user.total_views_count() # Returns the total views count of all the shared projects of a user +user.total_loves_count() # Returns the total loves count of all the shared projects of a user +user.total_favourites_count() # Returns the total favourites count of all the shared projects of a user +user.following() # Returns the list of the user following +user.followers() # Returns the list of the user followers +user.favourites() # Returns the list of the user favourites +user.user_follower_history() # Return the follower history of the user +user.post_comment(content="Hi!") # Post a comment on the user's profile +user.report(field="") # Report a user +user.reply_comment(content="Hi!", comment_id=1) # Reply a comment +user.all_data() # Returns all the data of the user +user.comments(limit=5, page=1) # Get comments of the profile of the user +user.ocular_data() # Returns the ocular data of the user +user.aviate_data(code=False) # Returns the Aviate Status of the user +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +user.update_data() # Update the data +``` + +### Connect a Scratch Studio: + +To connect a Scratch Studio use the `connect_studio()` function. Use the following program to connect a Scratch Studio: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +studio = user.connect_studio(studio_id=1) +studio.id() # Returns the studio ID +studio.title() # Returns the studio title +studio.host_id() # Returns the studio owner/host ID +studio.description() # Returns the studio description +studio.visibility() # Returns the studio visibility +studio.is_public() # Returns whether a studio is public +studio.is_open_to_all() # Returns whether a studio is open to all +studio.are_comments_allowed() # Returns whether a studio has comments allowed +studio.history() # Returns the history of the studio +studio.stats() # Returns the stats of the studio +studio.thumbnail_url() # Returns the thumbnail URL of the studio +studio.add_project(project_id=1) # Add a project to a studio +studio.remove_project(project_id=1) # Remove a project from a studio +studio.open_to_public() # Open the studio to public +studio.close_to_public() # Close the studio to public +studio.follow_studio() # Follow the studio +studio.unfollow_studio() # UnFollow the studio +studio.toggle_commenting() # Toggle the commenting of the studio +studio.post_comment(content="Hi!") # Post comment in the studio +studio.reply_comment(content="Hi!", comment_id=1) # Reply a comment in a studio +studio.delete_comment() # Delete comment in the studio +studio.report_comment(comment_id=1) # Report comment in the studio +studio.invite_curator(username="Sid72020123") # Invite a user to the studio +studio.accept_curator() # Accept the curator invitation in a studio +studio.promote_curator(username="Sid72020123") # Promote a user in the studio +studio.set_description(content="Hi!") # Set the description of a Studio +studio.set_title(content="Hi!") # Set the title of a Studio +studio.projects(all=False, limit=40, offset=0) # Get the projects of the studio +studio.comments(all=False, limit=40, offset=0) # Get the comments of the studio +studio.curators(all=False, limit=40, offset=0) # Get the curators of the studio +studio.managers(all=False, limit=40, offset=0) # Get the managers of the studio +studio.activity(all=False, limit=40, offset=0) # Get the activity of the studio +studio.all_data() # Returns all the data of a Scratch Studio +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +studio.update_data() # Update the data +``` + +### Connect a Scratch Project: + +To connect a Scratch Project use the `connect_project()` function. Use the following program to connect a Scratch +Project: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +project = user.connect_project(project_id=1) # Connect a project. +project.author() # Returns the author of the project +project.title() # Returns the title of the project +project.notes() # Returns the notes(Notes or Credits) of the project +project.instruction() # Returns the instructions of the project +project.are_comments_allowed() # Returns whether the comments are allowed in a project +project.stats() # Returns the stats of a project +project.history() # Returns the history of a project +project.remix_data() # Returns the remix data of a project +project.visibility() # Returns whether the project is visible +project.is_public() # Returns whether the project is public +project.is_published() # Returns whether the project is published +project.thumbnail_url() # Returns the thumbnail url of a project +project.assets_info() # Returns the Assets info of a project +project.scripts() # Returns the scripts of a project +project.love() # Love a project +project.unlove() # UnLove a project +project.favourite() # Favourite a project +project.unfavourite() # UnFavourite a project +project.comments(all=False, limit=40, offset=0, comment_id=None) # Returns the list of comments of a project +project.remixes(all=False, limit=20, offset=0) # Returns the list of remixes of a project +project.post_comment(content="Hi!") # Post a comment +project.reply_comment(content="Hi!", comment_id=1) # Reply a comment +project.toggle_commenting() # Toggle the commenting of a project +project.turn_on_commenting() # Turn On the commenting of a project +project.turn_off_commenting() # Turn Off the commenting of a project +project.report(category="", reason="") # Report a project +project.unshare() # Unshare a project +project.view() # Just view a project +project.set_thumbnail(file="") # Set the thumbnail of a project +project.delete_comment(comment_id=1) # Delete a comment +project.report_comment(comment_id=1) # Report a comment +project.reply_comment(comment_id=1, content="Hi!") # Reply a comment +project.set_title() # Set the title of the project +project.set_description() # Set the description of the project +project.set_instruction() # Set the instruction of the project +project.all_data() # Returns all the data of a Scratch Project +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +project.update_data() # Update the 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.** + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +project = user.connect_project(project_id=1, + access_unshared=True) # Use the 'access_unshared' parameter to access the unshared project. +``` + +### 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: + +```python +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) # Returns the cloud variable data +variables.get_cloud_variable_value(variable_name="Name", limit=100) # Returns the cloud variable value +# Program to set cloud variables: +set = variables.set_cloud_variable(variable_name="Name", value=123) # Set a Cloud Variable +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!** + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +project = user.connect_project(project_id=1) # Connect a Project +tw_cloud = project.connect_turbowarp_cloud( + username="Username") # Connect the Turbowarp cloud with an optional parameter to change the username! + +tw_cloud.set_cloud_variable(variable_name="Name", value=0) # Set a Turbowarp variable + +tw_cloud.get_variable_data() # Get the data of the previous value of the variable. NOT Current +``` + +### 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](https://scratch.mit.edu/projects/578255313/) for the Scratch version of Encoder/Decoder + +##### Encoding/Decoding a string: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +project = login.connect_project(1) # Connect the project + +variables = project.connect_cloud_variables() # Connect the project's cloud variables + +encoded_string = variables.encode("Hi! This is a text!") # Encode a string + +variables.set_cloud_variable(variable_name='Name', value=encoded_string) +variable_value = variables.get_cloud_variable_value(variable_name='Name')[0] # Get the variable value + +decoded_string = variables.decode(variable_value) # Decode a string + +print("Encoded: ", encoded_string) # Print the results to check +print("Decoded: ", decoded_string) # Print the results to check +``` + +##### Encoding/Decoding a list: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +project = login.connect_project(1) # Connect the project + +variables = project.connect_cloud_variables() # Connect the project's cloud variables + +data = ['A', 'B', 'C'] +encoded_string = variables.encode_list(data) # Encode a list + +variables.set_cloud_variable(variable_name='Name', value=encoded_string) +variable_value = variables.get_cloud_variable_value(variable_name='Name')[0] # Get the variable value + +decoded_string = variables.decode_list(variable_value) # Decode a list + +print("Encoded: ", encoded_string) # Print the results to check +print("Decoded: ", decoded_string) # Print the results to check +``` + +#### 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: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +forum = user.connect_forum_topic(forum_id=1) +forum.id() # Returns the id of the forum +forum.title() # Returns the title of the forum +forum.category() # Returns the category of the forum +forum.closed() # Returns whether the forum is closed or not +forum.deleted() # Returns whether the forum is deleted or not +forum.time() # Returns the activity of the forum +forum.post_count() # Returns the total post count of the forum +forum.follow() # Follow a Forum +forum.unfollow() # Unfollow a Forum +forum.posts(page=1) # Get the post in Forum Topic of a specified page. Images and some other stuff will not appear! +forum.ocular_reactions(post_id=123) # Get the ocular reactions of the post +forum.topic_post_history(usernames="total", segment="1", range="30") # Get the post history of the topic +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +forum.update_data() # Update the data +``` + +### Cloud Events + +If you want to handle various Cloud Events on Scratch, use the following code: + +#### In Scratch: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +project = login.connect_project(1) # Connect the project + +cloud = project.connect_cloud_variables() # Connect the project's cloud + +event = cloud.create_cloud_event() # Create a 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) # Start the event with update time + +# To Stop a Cloud Event, use the event.stop() function +``` + +#### 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](https://scratch.mit.edu/projects/606881698/) and +click 'see inside'. There will be all the instructions.** + +To create a cloud storage in ScratchConnect use the code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +project = login.connect_project(1) # Connect the project + +cloud_storage = project.create_cloud_storage(file_name="data", rewrite_file=False, edit_access=[ + 'Sid72020123'], + all_access=False) # Create a cloud storage. It will create a file in the specified location. Then there is 'edit_access' list which contains the users which have permission to edit(actually create and delete) the variables. Use the 'rewrite_file' argument if you want the file to be re-written again each time you write the program! You can set the 'all_access' to True if you want to give all the access to all users! + +cloud_storage.start_cloud_loop(update_time=1, + print_requests=True) # Start the Cloud Storage. Use the 'update_time' to wait for the specified time. Use the 'print_requests' to print the request info in the console/output screen. +``` + +### 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.** + +```python +import scratchconnect + +scratch_cookie = { + "Username": "Your username", + "SessionID": "Your SessionID", +} # set the cookie dictionary + +login = scratchconnect.ScratchConnect(cookie=scratch_cookie) # Login with 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: + +```python +import scratchconnect + +scratch_cookie = { + "Username": "Your username", + "SessionID": "Your SessionID", +} # set the cookie dictionary + +login = scratchconnect.ScratchConnect(username="USERNAME", password="PASSWORD", + cookie=scratch_cookie, + auto_cookie_login=True) # Login with cookie and enable the auto_cookie_login +``` + +### Using ScratchConnect without login + +With ScratchConnect v3.1+, you can use it without login! Example code: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect() # Leave all the values empty to use this library without login! +``` + +**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: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +terminal = login.create_new_terminal() # Create a new Terminal object +terminal.start() # Start the main terminal program +``` + +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: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +user_chart = chart.user_stats_chart( + usernames=["griffpatch", "Will_Wam", "ScratchCat"]) # Create users stats comparison chart + +user_table = chart.user_stats_table( + usernames=["griffpatch", "Will_Wam", "ScratchCat"]) # Create users stats comparison table + +user_chart.open() # Open User chart +user_table.open() # Open User table +``` + +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: + +```python +['Username', 'Messages Count', 'Follower Count', 'Following Count', 'Total Loves', + 'Total Favourites', 'Total Projects Count'] +``` + +#### Studio Comparison Chart: + +See the example code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +studio_chart = chart.studio_stats_chart( + studio_ids=[100, 101, 102]) # Create studio stats comparison chart + +studio_table = chart.studio_stats_table( + studio_ids=[100, 101, 102]) # Create studio stats comparison table + +studio_chart.open() # Open Studio chart +studio_table.open() # Open Studio table +``` + +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: + +```python +['Studio ID', 'Comments Count', 'Followers Count', 'Managers Count', 'Projects Count'] +``` + +#### Project Comparison Chart: + +See the example code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +project_chart = chart.project_stats_chart( + project_ids=[104, 105, 106]) # Create project stats comparison chart + +project_table = chart.project_stats_table( + project_ids=[104, 105, 106]) # Create project stats comparison table + +project_chart.open() # Open Project chart +project_table.open() # Open Project table +``` + +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: + +```python +['Project ID', 'Views', 'Loves', 'Favourites', 'Remixes', 'Version', 'Costumes', 'Blocks', + 'Variables', 'Assets'] +``` + +#### User Follower History Chart: + +See the example code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +c = chart.user_followers_history_chart(username="griffpatch") # Followers History Chart + +t = chart.user_followers_history_table(username="griffpatch") # Followers History Table + +c.open() # Open chart +t.open() # Open table +``` + +### 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: +```python +import scratchconnect + +session_id = "<your session id here>" +cookie = { + "Username": "<your username>", + "SessionID": session_id +} + +login = scratchconnect.ScratchConnect(online_ide_cookie=cookie) # Pass the cookie variable as a parameter to the ScratchConnect class + +# Your code here... +``` + +### 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](https://github.com/Sid72020123/scratchconnect/blob/main/CLOUD_REQUESTS.md) + +### Projects made using ScratchConnect + +To see the projects made using ScratchConnect, go to the +official [ScratchConnect Projects Studio](https://scratch.mit.edu/studios/30427944/) + +### Bug Reporting: + +All Bugs to be reported on my [Scratch Profile](https://scratch.mit.edu/users/Sid72020123/) +or [Github](https://github.com/Sid72020123/scratchconnect/issues) + +### 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](https://scratch.mit.edu/users/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* + + + +%package -n python3-scratchconnect +Summary: 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! +Provides: python-scratchconnect +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-scratchconnect +# 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/](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.** + + + + +[](https://pypi.org/project/scratchconnect/) + + + +### Installation + +To install this library, just type ```pip install scratchconnect``` in the terminal (Command Prompt) + +**OR** + +Run this Python program + +```python +import os + +os.system('pip install scratchconnect') +``` + +**If you still have troubles while installing then go +to [this link](https://packaging.python.org/tutorials/installing-packages/)** + +### 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: + +* [Scratch API](https://github.com/LLK/scratch-rest-api) by the Scratch Team +* [Scratch DB](https://scratchdb.lefty.one/) by [@DatOneLefty](https://scratch.mit.edu/users/DatOneLefty/) on Scratch +* [Scratch Comments API](https://github.com/Sid72020123/Scratch-Comments-API) + by [@Sid72020123](https://scratch.mit.edu/users/Sid72020123/) on Scratch +* [Simple Forum API](https://github.com/Sid72020123/Scratch-Forum) + by [@Sid72020123](https://scratch.mit.edu/users/Sid72020123/) on Scratch +* [Ocular API](https://ocular.jeffalo.net/) by [@Jeffalo](https://scratch.mit.edu/users/Jeffalo/) on Scratch +* [Aviate API](https://aviateapp.eu.org/) by [@NFlex23](https://scratch.mit.edu/users/NFlex23/) on Scratch + +``` +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.** + +```python +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 + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +user.id() # Returns the ID of the user +user.thumbnail_url() # Returns the thumbnail URL of a user +user.messages_count() # Returns the messages count of the user +user.messages(all=False, limit=20, offset=0, filter="all") # Returns the messages +user.clear_messages() # Clear your messages +user.my_stuff_projects(order="all", page=1, sort_by="") # Get/Sort mystuff projects +user.work() # Returns the 'What I am working on' of a Scratch profile +user.bio() # Returns the 'About me' of a Scratch profile +user.status() # Returns the status(Scratcher or New Scratcher) of a Scratch profile +user.joined_date() # Returns the joined date of a Scratch profile +user.country() # Returns the country of a Scratch profile +user.featured_data() # Returns the featured project data of the Scratch profile +user.projects() # Returns the list of shared projects of a user +user.followers_count() # Returns the follower count of a user +user.following_count() # Returns the following count of a user +user.total_views() # Returns the total views count of all the shared projects of a user +user.total_loves_count() # Returns the total loves count of all the shared projects of a user +user.total_favourites_count() # Returns the total favourites count of all the shared projects of a user +user.following() # Returns the list of the user following +user.followers() # Returns the list of the user followers +user.favourites() # Returns the list of the user favourites +user.toggle_commenting() # Toggle the commenting of the profile +user.follow_user(username="Sid72020123") # Follow a user +user.unfollow_user(username="Sid72020123") # UnFollow a user +user.set_bio(content="Hi!") # Set the bio or 'About Me' of the profile +user.set_work(content="Hi!") # Set the status or 'What I am Working On' of the profile +user.all_data() # Returns all the data of the user +user.site_health() # Returns the health of the Scratch Website. +user.site_news() # Returns the news of the Scratch Website. +user.site_front_page_projects() # Returns the front page projects of the Scratch Website. +user.explore_projects(mode="trending", query="*") # Explore the projects +user.explore_studios(mode="trending", query="*") # Explore the studios +user.search_projects(mode="trending", search="*") # Search the projects +user.search_studios(mode="trending", search="*") # Search the studios +user.set_featured_project(project_id="1", label='featured_project') # Set the 'Featured Project' of a Scratch Profile +user.user_follower_history() # Return the follower history of the user +user.comments(limit=5, page=1) # Get comments of the profile of the user +user.ocular_data() # Returns the ocular data of the user +user.aviate_data(code=False) # Returns the Aviate Status of the user +user.search_forum(q="Hi!", order="relevance", page=0) # Search the forum +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +user.update_data() # Update the data +``` + +### Connect a Scratch User: + +To connect a Scratch User use the `connect_user()` function. Use the following program to connect a Scratch User: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +user = login.connect_user(username="Sid72020123") +user.id() # Returns the ID of the user +user.thumbnail_url() # Returns the thumbnail URL of a user +user.messages_count() # Returns the messages count of the user +user.work() # Returns the 'What I am working on' of a Scratch profile +user.bio() # Returns the 'About me' of a Scratch profile +user.status() # Returns the status(Scratcher or New Scratcher) of a Scratch profile +user.joined_date() # Returns the joined date of a Scratch profile +user.country() # Returns the country of a Scratch profile +user.featured_data() # Returns the featured project data of the Scratch profile +user.projects() # Returns the list of shared projects of a user +user.followers_count() # Returns the follower count of a user +user.following_count() # Returns the following count of a user +user.total_views_count() # Returns the total views count of all the shared projects of a user +user.total_loves_count() # Returns the total loves count of all the shared projects of a user +user.total_favourites_count() # Returns the total favourites count of all the shared projects of a user +user.following() # Returns the list of the user following +user.followers() # Returns the list of the user followers +user.favourites() # Returns the list of the user favourites +user.user_follower_history() # Return the follower history of the user +user.post_comment(content="Hi!") # Post a comment on the user's profile +user.report(field="") # Report a user +user.reply_comment(content="Hi!", comment_id=1) # Reply a comment +user.all_data() # Returns all the data of the user +user.comments(limit=5, page=1) # Get comments of the profile of the user +user.ocular_data() # Returns the ocular data of the user +user.aviate_data(code=False) # Returns the Aviate Status of the user +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +user.update_data() # Update the data +``` + +### Connect a Scratch Studio: + +To connect a Scratch Studio use the `connect_studio()` function. Use the following program to connect a Scratch Studio: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +studio = user.connect_studio(studio_id=1) +studio.id() # Returns the studio ID +studio.title() # Returns the studio title +studio.host_id() # Returns the studio owner/host ID +studio.description() # Returns the studio description +studio.visibility() # Returns the studio visibility +studio.is_public() # Returns whether a studio is public +studio.is_open_to_all() # Returns whether a studio is open to all +studio.are_comments_allowed() # Returns whether a studio has comments allowed +studio.history() # Returns the history of the studio +studio.stats() # Returns the stats of the studio +studio.thumbnail_url() # Returns the thumbnail URL of the studio +studio.add_project(project_id=1) # Add a project to a studio +studio.remove_project(project_id=1) # Remove a project from a studio +studio.open_to_public() # Open the studio to public +studio.close_to_public() # Close the studio to public +studio.follow_studio() # Follow the studio +studio.unfollow_studio() # UnFollow the studio +studio.toggle_commenting() # Toggle the commenting of the studio +studio.post_comment(content="Hi!") # Post comment in the studio +studio.reply_comment(content="Hi!", comment_id=1) # Reply a comment in a studio +studio.delete_comment() # Delete comment in the studio +studio.report_comment(comment_id=1) # Report comment in the studio +studio.invite_curator(username="Sid72020123") # Invite a user to the studio +studio.accept_curator() # Accept the curator invitation in a studio +studio.promote_curator(username="Sid72020123") # Promote a user in the studio +studio.set_description(content="Hi!") # Set the description of a Studio +studio.set_title(content="Hi!") # Set the title of a Studio +studio.projects(all=False, limit=40, offset=0) # Get the projects of the studio +studio.comments(all=False, limit=40, offset=0) # Get the comments of the studio +studio.curators(all=False, limit=40, offset=0) # Get the curators of the studio +studio.managers(all=False, limit=40, offset=0) # Get the managers of the studio +studio.activity(all=False, limit=40, offset=0) # Get the activity of the studio +studio.all_data() # Returns all the data of a Scratch Studio +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +studio.update_data() # Update the data +``` + +### Connect a Scratch Project: + +To connect a Scratch Project use the `connect_project()` function. Use the following program to connect a Scratch +Project: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +project = user.connect_project(project_id=1) # Connect a project. +project.author() # Returns the author of the project +project.title() # Returns the title of the project +project.notes() # Returns the notes(Notes or Credits) of the project +project.instruction() # Returns the instructions of the project +project.are_comments_allowed() # Returns whether the comments are allowed in a project +project.stats() # Returns the stats of a project +project.history() # Returns the history of a project +project.remix_data() # Returns the remix data of a project +project.visibility() # Returns whether the project is visible +project.is_public() # Returns whether the project is public +project.is_published() # Returns whether the project is published +project.thumbnail_url() # Returns the thumbnail url of a project +project.assets_info() # Returns the Assets info of a project +project.scripts() # Returns the scripts of a project +project.love() # Love a project +project.unlove() # UnLove a project +project.favourite() # Favourite a project +project.unfavourite() # UnFavourite a project +project.comments(all=False, limit=40, offset=0, comment_id=None) # Returns the list of comments of a project +project.remixes(all=False, limit=20, offset=0) # Returns the list of remixes of a project +project.post_comment(content="Hi!") # Post a comment +project.reply_comment(content="Hi!", comment_id=1) # Reply a comment +project.toggle_commenting() # Toggle the commenting of a project +project.turn_on_commenting() # Turn On the commenting of a project +project.turn_off_commenting() # Turn Off the commenting of a project +project.report(category="", reason="") # Report a project +project.unshare() # Unshare a project +project.view() # Just view a project +project.set_thumbnail(file="") # Set the thumbnail of a project +project.delete_comment(comment_id=1) # Delete a comment +project.report_comment(comment_id=1) # Report a comment +project.reply_comment(comment_id=1, content="Hi!") # Reply a comment +project.set_title() # Set the title of the project +project.set_description() # Set the description of the project +project.set_instruction() # Set the instruction of the project +project.all_data() # Returns all the data of a Scratch Project +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +project.update_data() # Update the 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.** + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +project = user.connect_project(project_id=1, + access_unshared=True) # Use the 'access_unshared' parameter to access the unshared project. +``` + +### 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: + +```python +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) # Returns the cloud variable data +variables.get_cloud_variable_value(variable_name="Name", limit=100) # Returns the cloud variable value +# Program to set cloud variables: +set = variables.set_cloud_variable(variable_name="Name", value=123) # Set a Cloud Variable +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!** + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +project = user.connect_project(project_id=1) # Connect a Project +tw_cloud = project.connect_turbowarp_cloud( + username="Username") # Connect the Turbowarp cloud with an optional parameter to change the username! + +tw_cloud.set_cloud_variable(variable_name="Name", value=0) # Set a Turbowarp variable + +tw_cloud.get_variable_data() # Get the data of the previous value of the variable. NOT Current +``` + +### 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](https://scratch.mit.edu/projects/578255313/) for the Scratch version of Encoder/Decoder + +##### Encoding/Decoding a string: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +project = login.connect_project(1) # Connect the project + +variables = project.connect_cloud_variables() # Connect the project's cloud variables + +encoded_string = variables.encode("Hi! This is a text!") # Encode a string + +variables.set_cloud_variable(variable_name='Name', value=encoded_string) +variable_value = variables.get_cloud_variable_value(variable_name='Name')[0] # Get the variable value + +decoded_string = variables.decode(variable_value) # Decode a string + +print("Encoded: ", encoded_string) # Print the results to check +print("Decoded: ", decoded_string) # Print the results to check +``` + +##### Encoding/Decoding a list: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +project = login.connect_project(1) # Connect the project + +variables = project.connect_cloud_variables() # Connect the project's cloud variables + +data = ['A', 'B', 'C'] +encoded_string = variables.encode_list(data) # Encode a list + +variables.set_cloud_variable(variable_name='Name', value=encoded_string) +variable_value = variables.get_cloud_variable_value(variable_name='Name')[0] # Get the variable value + +decoded_string = variables.decode_list(variable_value) # Decode a list + +print("Encoded: ", encoded_string) # Print the results to check +print("Decoded: ", decoded_string) # Print the results to check +``` + +#### 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: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +forum = user.connect_forum_topic(forum_id=1) +forum.id() # Returns the id of the forum +forum.title() # Returns the title of the forum +forum.category() # Returns the category of the forum +forum.closed() # Returns whether the forum is closed or not +forum.deleted() # Returns whether the forum is deleted or not +forum.time() # Returns the activity of the forum +forum.post_count() # Returns the total post count of the forum +forum.follow() # Follow a Forum +forum.unfollow() # Unfollow a Forum +forum.posts(page=1) # Get the post in Forum Topic of a specified page. Images and some other stuff will not appear! +forum.ocular_reactions(post_id=123) # Get the ocular reactions of the post +forum.topic_post_history(usernames="total", segment="1", range="30") # Get the post history of the topic +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +forum.update_data() # Update the data +``` + +### Cloud Events + +If you want to handle various Cloud Events on Scratch, use the following code: + +#### In Scratch: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +project = login.connect_project(1) # Connect the project + +cloud = project.connect_cloud_variables() # Connect the project's cloud + +event = cloud.create_cloud_event() # Create a 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) # Start the event with update time + +# To Stop a Cloud Event, use the event.stop() function +``` + +#### 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](https://scratch.mit.edu/projects/606881698/) and +click 'see inside'. There will be all the instructions.** + +To create a cloud storage in ScratchConnect use the code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +project = login.connect_project(1) # Connect the project + +cloud_storage = project.create_cloud_storage(file_name="data", rewrite_file=False, edit_access=[ + 'Sid72020123'], + all_access=False) # Create a cloud storage. It will create a file in the specified location. Then there is 'edit_access' list which contains the users which have permission to edit(actually create and delete) the variables. Use the 'rewrite_file' argument if you want the file to be re-written again each time you write the program! You can set the 'all_access' to True if you want to give all the access to all users! + +cloud_storage.start_cloud_loop(update_time=1, + print_requests=True) # Start the Cloud Storage. Use the 'update_time' to wait for the specified time. Use the 'print_requests' to print the request info in the console/output screen. +``` + +### 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.** + +```python +import scratchconnect + +scratch_cookie = { + "Username": "Your username", + "SessionID": "Your SessionID", +} # set the cookie dictionary + +login = scratchconnect.ScratchConnect(cookie=scratch_cookie) # Login with 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: + +```python +import scratchconnect + +scratch_cookie = { + "Username": "Your username", + "SessionID": "Your SessionID", +} # set the cookie dictionary + +login = scratchconnect.ScratchConnect(username="USERNAME", password="PASSWORD", + cookie=scratch_cookie, + auto_cookie_login=True) # Login with cookie and enable the auto_cookie_login +``` + +### Using ScratchConnect without login + +With ScratchConnect v3.1+, you can use it without login! Example code: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect() # Leave all the values empty to use this library without login! +``` + +**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: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +terminal = login.create_new_terminal() # Create a new Terminal object +terminal.start() # Start the main terminal program +``` + +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: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +user_chart = chart.user_stats_chart( + usernames=["griffpatch", "Will_Wam", "ScratchCat"]) # Create users stats comparison chart + +user_table = chart.user_stats_table( + usernames=["griffpatch", "Will_Wam", "ScratchCat"]) # Create users stats comparison table + +user_chart.open() # Open User chart +user_table.open() # Open User table +``` + +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: + +```python +['Username', 'Messages Count', 'Follower Count', 'Following Count', 'Total Loves', + 'Total Favourites', 'Total Projects Count'] +``` + +#### Studio Comparison Chart: + +See the example code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +studio_chart = chart.studio_stats_chart( + studio_ids=[100, 101, 102]) # Create studio stats comparison chart + +studio_table = chart.studio_stats_table( + studio_ids=[100, 101, 102]) # Create studio stats comparison table + +studio_chart.open() # Open Studio chart +studio_table.open() # Open Studio table +``` + +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: + +```python +['Studio ID', 'Comments Count', 'Followers Count', 'Managers Count', 'Projects Count'] +``` + +#### Project Comparison Chart: + +See the example code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +project_chart = chart.project_stats_chart( + project_ids=[104, 105, 106]) # Create project stats comparison chart + +project_table = chart.project_stats_table( + project_ids=[104, 105, 106]) # Create project stats comparison table + +project_chart.open() # Open Project chart +project_table.open() # Open Project table +``` + +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: + +```python +['Project ID', 'Views', 'Loves', 'Favourites', 'Remixes', 'Version', 'Costumes', 'Blocks', + 'Variables', 'Assets'] +``` + +#### User Follower History Chart: + +See the example code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +c = chart.user_followers_history_chart(username="griffpatch") # Followers History Chart + +t = chart.user_followers_history_table(username="griffpatch") # Followers History Table + +c.open() # Open chart +t.open() # Open table +``` + +### 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: +```python +import scratchconnect + +session_id = "<your session id here>" +cookie = { + "Username": "<your username>", + "SessionID": session_id +} + +login = scratchconnect.ScratchConnect(online_ide_cookie=cookie) # Pass the cookie variable as a parameter to the ScratchConnect class + +# Your code here... +``` + +### 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](https://github.com/Sid72020123/scratchconnect/blob/main/CLOUD_REQUESTS.md) + +### Projects made using ScratchConnect + +To see the projects made using ScratchConnect, go to the +official [ScratchConnect Projects Studio](https://scratch.mit.edu/studios/30427944/) + +### Bug Reporting: + +All Bugs to be reported on my [Scratch Profile](https://scratch.mit.edu/users/Sid72020123/) +or [Github](https://github.com/Sid72020123/scratchconnect/issues) + +### 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](https://scratch.mit.edu/users/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* + + + +%package help +Summary: Development documents and examples for scratchconnect +Provides: python3-scratchconnect-doc +%description help +# 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/](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.** + + + + +[](https://pypi.org/project/scratchconnect/) + + + +### Installation + +To install this library, just type ```pip install scratchconnect``` in the terminal (Command Prompt) + +**OR** + +Run this Python program + +```python +import os + +os.system('pip install scratchconnect') +``` + +**If you still have troubles while installing then go +to [this link](https://packaging.python.org/tutorials/installing-packages/)** + +### 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: + +* [Scratch API](https://github.com/LLK/scratch-rest-api) by the Scratch Team +* [Scratch DB](https://scratchdb.lefty.one/) by [@DatOneLefty](https://scratch.mit.edu/users/DatOneLefty/) on Scratch +* [Scratch Comments API](https://github.com/Sid72020123/Scratch-Comments-API) + by [@Sid72020123](https://scratch.mit.edu/users/Sid72020123/) on Scratch +* [Simple Forum API](https://github.com/Sid72020123/Scratch-Forum) + by [@Sid72020123](https://scratch.mit.edu/users/Sid72020123/) on Scratch +* [Ocular API](https://ocular.jeffalo.net/) by [@Jeffalo](https://scratch.mit.edu/users/Jeffalo/) on Scratch +* [Aviate API](https://aviateapp.eu.org/) by [@NFlex23](https://scratch.mit.edu/users/NFlex23/) on Scratch + +``` +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.** + +```python +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 + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +user.id() # Returns the ID of the user +user.thumbnail_url() # Returns the thumbnail URL of a user +user.messages_count() # Returns the messages count of the user +user.messages(all=False, limit=20, offset=0, filter="all") # Returns the messages +user.clear_messages() # Clear your messages +user.my_stuff_projects(order="all", page=1, sort_by="") # Get/Sort mystuff projects +user.work() # Returns the 'What I am working on' of a Scratch profile +user.bio() # Returns the 'About me' of a Scratch profile +user.status() # Returns the status(Scratcher or New Scratcher) of a Scratch profile +user.joined_date() # Returns the joined date of a Scratch profile +user.country() # Returns the country of a Scratch profile +user.featured_data() # Returns the featured project data of the Scratch profile +user.projects() # Returns the list of shared projects of a user +user.followers_count() # Returns the follower count of a user +user.following_count() # Returns the following count of a user +user.total_views() # Returns the total views count of all the shared projects of a user +user.total_loves_count() # Returns the total loves count of all the shared projects of a user +user.total_favourites_count() # Returns the total favourites count of all the shared projects of a user +user.following() # Returns the list of the user following +user.followers() # Returns the list of the user followers +user.favourites() # Returns the list of the user favourites +user.toggle_commenting() # Toggle the commenting of the profile +user.follow_user(username="Sid72020123") # Follow a user +user.unfollow_user(username="Sid72020123") # UnFollow a user +user.set_bio(content="Hi!") # Set the bio or 'About Me' of the profile +user.set_work(content="Hi!") # Set the status or 'What I am Working On' of the profile +user.all_data() # Returns all the data of the user +user.site_health() # Returns the health of the Scratch Website. +user.site_news() # Returns the news of the Scratch Website. +user.site_front_page_projects() # Returns the front page projects of the Scratch Website. +user.explore_projects(mode="trending", query="*") # Explore the projects +user.explore_studios(mode="trending", query="*") # Explore the studios +user.search_projects(mode="trending", search="*") # Search the projects +user.search_studios(mode="trending", search="*") # Search the studios +user.set_featured_project(project_id="1", label='featured_project') # Set the 'Featured Project' of a Scratch Profile +user.user_follower_history() # Return the follower history of the user +user.comments(limit=5, page=1) # Get comments of the profile of the user +user.ocular_data() # Returns the ocular data of the user +user.aviate_data(code=False) # Returns the Aviate Status of the user +user.search_forum(q="Hi!", order="relevance", page=0) # Search the forum +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +user.update_data() # Update the data +``` + +### Connect a Scratch User: + +To connect a Scratch User use the `connect_user()` function. Use the following program to connect a Scratch User: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +user = login.connect_user(username="Sid72020123") +user.id() # Returns the ID of the user +user.thumbnail_url() # Returns the thumbnail URL of a user +user.messages_count() # Returns the messages count of the user +user.work() # Returns the 'What I am working on' of a Scratch profile +user.bio() # Returns the 'About me' of a Scratch profile +user.status() # Returns the status(Scratcher or New Scratcher) of a Scratch profile +user.joined_date() # Returns the joined date of a Scratch profile +user.country() # Returns the country of a Scratch profile +user.featured_data() # Returns the featured project data of the Scratch profile +user.projects() # Returns the list of shared projects of a user +user.followers_count() # Returns the follower count of a user +user.following_count() # Returns the following count of a user +user.total_views_count() # Returns the total views count of all the shared projects of a user +user.total_loves_count() # Returns the total loves count of all the shared projects of a user +user.total_favourites_count() # Returns the total favourites count of all the shared projects of a user +user.following() # Returns the list of the user following +user.followers() # Returns the list of the user followers +user.favourites() # Returns the list of the user favourites +user.user_follower_history() # Return the follower history of the user +user.post_comment(content="Hi!") # Post a comment on the user's profile +user.report(field="") # Report a user +user.reply_comment(content="Hi!", comment_id=1) # Reply a comment +user.all_data() # Returns all the data of the user +user.comments(limit=5, page=1) # Get comments of the profile of the user +user.ocular_data() # Returns the ocular data of the user +user.aviate_data(code=False) # Returns the Aviate Status of the user +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +user.update_data() # Update the data +``` + +### Connect a Scratch Studio: + +To connect a Scratch Studio use the `connect_studio()` function. Use the following program to connect a Scratch Studio: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +studio = user.connect_studio(studio_id=1) +studio.id() # Returns the studio ID +studio.title() # Returns the studio title +studio.host_id() # Returns the studio owner/host ID +studio.description() # Returns the studio description +studio.visibility() # Returns the studio visibility +studio.is_public() # Returns whether a studio is public +studio.is_open_to_all() # Returns whether a studio is open to all +studio.are_comments_allowed() # Returns whether a studio has comments allowed +studio.history() # Returns the history of the studio +studio.stats() # Returns the stats of the studio +studio.thumbnail_url() # Returns the thumbnail URL of the studio +studio.add_project(project_id=1) # Add a project to a studio +studio.remove_project(project_id=1) # Remove a project from a studio +studio.open_to_public() # Open the studio to public +studio.close_to_public() # Close the studio to public +studio.follow_studio() # Follow the studio +studio.unfollow_studio() # UnFollow the studio +studio.toggle_commenting() # Toggle the commenting of the studio +studio.post_comment(content="Hi!") # Post comment in the studio +studio.reply_comment(content="Hi!", comment_id=1) # Reply a comment in a studio +studio.delete_comment() # Delete comment in the studio +studio.report_comment(comment_id=1) # Report comment in the studio +studio.invite_curator(username="Sid72020123") # Invite a user to the studio +studio.accept_curator() # Accept the curator invitation in a studio +studio.promote_curator(username="Sid72020123") # Promote a user in the studio +studio.set_description(content="Hi!") # Set the description of a Studio +studio.set_title(content="Hi!") # Set the title of a Studio +studio.projects(all=False, limit=40, offset=0) # Get the projects of the studio +studio.comments(all=False, limit=40, offset=0) # Get the comments of the studio +studio.curators(all=False, limit=40, offset=0) # Get the curators of the studio +studio.managers(all=False, limit=40, offset=0) # Get the managers of the studio +studio.activity(all=False, limit=40, offset=0) # Get the activity of the studio +studio.all_data() # Returns all the data of a Scratch Studio +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +studio.update_data() # Update the data +``` + +### Connect a Scratch Project: + +To connect a Scratch Project use the `connect_project()` function. Use the following program to connect a Scratch +Project: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +project = user.connect_project(project_id=1) # Connect a project. +project.author() # Returns the author of the project +project.title() # Returns the title of the project +project.notes() # Returns the notes(Notes or Credits) of the project +project.instruction() # Returns the instructions of the project +project.are_comments_allowed() # Returns whether the comments are allowed in a project +project.stats() # Returns the stats of a project +project.history() # Returns the history of a project +project.remix_data() # Returns the remix data of a project +project.visibility() # Returns whether the project is visible +project.is_public() # Returns whether the project is public +project.is_published() # Returns whether the project is published +project.thumbnail_url() # Returns the thumbnail url of a project +project.assets_info() # Returns the Assets info of a project +project.scripts() # Returns the scripts of a project +project.love() # Love a project +project.unlove() # UnLove a project +project.favourite() # Favourite a project +project.unfavourite() # UnFavourite a project +project.comments(all=False, limit=40, offset=0, comment_id=None) # Returns the list of comments of a project +project.remixes(all=False, limit=20, offset=0) # Returns the list of remixes of a project +project.post_comment(content="Hi!") # Post a comment +project.reply_comment(content="Hi!", comment_id=1) # Reply a comment +project.toggle_commenting() # Toggle the commenting of a project +project.turn_on_commenting() # Turn On the commenting of a project +project.turn_off_commenting() # Turn Off the commenting of a project +project.report(category="", reason="") # Report a project +project.unshare() # Unshare a project +project.view() # Just view a project +project.set_thumbnail(file="") # Set the thumbnail of a project +project.delete_comment(comment_id=1) # Delete a comment +project.report_comment(comment_id=1) # Report a comment +project.reply_comment(comment_id=1, content="Hi!") # Reply a comment +project.set_title() # Set the title of the project +project.set_description() # Set the description of the project +project.set_instruction() # Set the instruction of the project +project.all_data() # Returns all the data of a Scratch Project +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +project.update_data() # Update the 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.** + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +project = user.connect_project(project_id=1, + access_unshared=True) # Use the 'access_unshared' parameter to access the unshared project. +``` + +### 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: + +```python +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) # Returns the cloud variable data +variables.get_cloud_variable_value(variable_name="Name", limit=100) # Returns the cloud variable value +# Program to set cloud variables: +set = variables.set_cloud_variable(variable_name="Name", value=123) # Set a Cloud Variable +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!** + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +project = user.connect_project(project_id=1) # Connect a Project +tw_cloud = project.connect_turbowarp_cloud( + username="Username") # Connect the Turbowarp cloud with an optional parameter to change the username! + +tw_cloud.set_cloud_variable(variable_name="Name", value=0) # Set a Turbowarp variable + +tw_cloud.get_variable_data() # Get the data of the previous value of the variable. NOT Current +``` + +### 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](https://scratch.mit.edu/projects/578255313/) for the Scratch version of Encoder/Decoder + +##### Encoding/Decoding a string: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +project = login.connect_project(1) # Connect the project + +variables = project.connect_cloud_variables() # Connect the project's cloud variables + +encoded_string = variables.encode("Hi! This is a text!") # Encode a string + +variables.set_cloud_variable(variable_name='Name', value=encoded_string) +variable_value = variables.get_cloud_variable_value(variable_name='Name')[0] # Get the variable value + +decoded_string = variables.decode(variable_value) # Decode a string + +print("Encoded: ", encoded_string) # Print the results to check +print("Decoded: ", decoded_string) # Print the results to check +``` + +##### Encoding/Decoding a list: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +project = login.connect_project(1) # Connect the project + +variables = project.connect_cloud_variables() # Connect the project's cloud variables + +data = ['A', 'B', 'C'] +encoded_string = variables.encode_list(data) # Encode a list + +variables.set_cloud_variable(variable_name='Name', value=encoded_string) +variable_value = variables.get_cloud_variable_value(variable_name='Name')[0] # Get the variable value + +decoded_string = variables.decode_list(variable_value) # Decode a list + +print("Encoded: ", encoded_string) # Print the results to check +print("Decoded: ", decoded_string) # Print the results to check +``` + +#### 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: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect("Username", "Password") +forum = user.connect_forum_topic(forum_id=1) +forum.id() # Returns the id of the forum +forum.title() # Returns the title of the forum +forum.category() # Returns the category of the forum +forum.closed() # Returns whether the forum is closed or not +forum.deleted() # Returns whether the forum is deleted or not +forum.time() # Returns the activity of the forum +forum.post_count() # Returns the total post count of the forum +forum.follow() # Follow a Forum +forum.unfollow() # Unfollow a Forum +forum.posts(page=1) # Get the post in Forum Topic of a specified page. Images and some other stuff will not appear! +forum.ocular_reactions(post_id=123) # Get the ocular reactions of the post +forum.topic_post_history(usernames="total", segment="1", range="30") # Get the post history of the topic +########################################################################## +# IMPORTANT NOTE: To always get the updated data use the update_data() function +########################################################################## +forum.update_data() # Update the data +``` + +### Cloud Events + +If you want to handle various Cloud Events on Scratch, use the following code: + +#### In Scratch: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +project = login.connect_project(1) # Connect the project + +cloud = project.connect_cloud_variables() # Connect the project's cloud + +event = cloud.create_cloud_event() # Create a 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) # Start the event with update time + +# To Stop a Cloud Event, use the event.stop() function +``` + +#### 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](https://scratch.mit.edu/projects/606881698/) and +click 'see inside'. There will be all the instructions.** + +To create a cloud storage in ScratchConnect use the code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") +project = login.connect_project(1) # Connect the project + +cloud_storage = project.create_cloud_storage(file_name="data", rewrite_file=False, edit_access=[ + 'Sid72020123'], + all_access=False) # Create a cloud storage. It will create a file in the specified location. Then there is 'edit_access' list which contains the users which have permission to edit(actually create and delete) the variables. Use the 'rewrite_file' argument if you want the file to be re-written again each time you write the program! You can set the 'all_access' to True if you want to give all the access to all users! + +cloud_storage.start_cloud_loop(update_time=1, + print_requests=True) # Start the Cloud Storage. Use the 'update_time' to wait for the specified time. Use the 'print_requests' to print the request info in the console/output screen. +``` + +### 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.** + +```python +import scratchconnect + +scratch_cookie = { + "Username": "Your username", + "SessionID": "Your SessionID", +} # set the cookie dictionary + +login = scratchconnect.ScratchConnect(cookie=scratch_cookie) # Login with 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: + +```python +import scratchconnect + +scratch_cookie = { + "Username": "Your username", + "SessionID": "Your SessionID", +} # set the cookie dictionary + +login = scratchconnect.ScratchConnect(username="USERNAME", password="PASSWORD", + cookie=scratch_cookie, + auto_cookie_login=True) # Login with cookie and enable the auto_cookie_login +``` + +### Using ScratchConnect without login + +With ScratchConnect v3.1+, you can use it without login! Example code: + +```python +import scratchconnect + +user = scratchconnect.ScratchConnect() # Leave all the values empty to use this library without login! +``` + +**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: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +terminal = login.create_new_terminal() # Create a new Terminal object +terminal.start() # Start the main terminal program +``` + +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: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +user_chart = chart.user_stats_chart( + usernames=["griffpatch", "Will_Wam", "ScratchCat"]) # Create users stats comparison chart + +user_table = chart.user_stats_table( + usernames=["griffpatch", "Will_Wam", "ScratchCat"]) # Create users stats comparison table + +user_chart.open() # Open User chart +user_table.open() # Open User table +``` + +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: + +```python +['Username', 'Messages Count', 'Follower Count', 'Following Count', 'Total Loves', + 'Total Favourites', 'Total Projects Count'] +``` + +#### Studio Comparison Chart: + +See the example code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +studio_chart = chart.studio_stats_chart( + studio_ids=[100, 101, 102]) # Create studio stats comparison chart + +studio_table = chart.studio_stats_table( + studio_ids=[100, 101, 102]) # Create studio stats comparison table + +studio_chart.open() # Open Studio chart +studio_table.open() # Open Studio table +``` + +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: + +```python +['Studio ID', 'Comments Count', 'Followers Count', 'Managers Count', 'Projects Count'] +``` + +#### Project Comparison Chart: + +See the example code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +project_chart = chart.project_stats_chart( + project_ids=[104, 105, 106]) # Create project stats comparison chart + +project_table = chart.project_stats_table( + project_ids=[104, 105, 106]) # Create project stats comparison table + +project_chart.open() # Open Project chart +project_table.open() # Open Project table +``` + +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: + +```python +['Project ID', 'Views', 'Loves', 'Favourites', 'Remixes', 'Version', 'Costumes', 'Blocks', + 'Variables', 'Assets'] +``` + +#### User Follower History Chart: + +See the example code: + +```python +import scratchconnect + +login = scratchconnect.ScratchConnect("Username", "Password") + +chart = login.create_new_chart() # Create a Chart object + +c = chart.user_followers_history_chart(username="griffpatch") # Followers History Chart + +t = chart.user_followers_history_table(username="griffpatch") # Followers History Table + +c.open() # Open chart +t.open() # Open table +``` + +### 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: +```python +import scratchconnect + +session_id = "<your session id here>" +cookie = { + "Username": "<your username>", + "SessionID": session_id +} + +login = scratchconnect.ScratchConnect(online_ide_cookie=cookie) # Pass the cookie variable as a parameter to the ScratchConnect class + +# Your code here... +``` + +### 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](https://github.com/Sid72020123/scratchconnect/blob/main/CLOUD_REQUESTS.md) + +### Projects made using ScratchConnect + +To see the projects made using ScratchConnect, go to the +official [ScratchConnect Projects Studio](https://scratch.mit.edu/studios/30427944/) + +### Bug Reporting: + +All Bugs to be reported on my [Scratch Profile](https://scratch.mit.edu/users/Sid72020123/) +or [Github](https://github.com/Sid72020123/scratchconnect/issues) + +### 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](https://scratch.mit.edu/users/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* + + + +%prep +%autosetup -n scratchconnect-5.0 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-scratchconnect -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Thu May 18 2023 Python_Bot <Python_Bot@openeuler.org> - 5.0-1 +- Package Spec generated |
