mirror of
https://github.com/hastagAB/Awesome-Python-Scripts.git
synced 2024-11-23 20:11:07 +00:00
Compare commits
103 Commits
bff9c9dc7b
...
b52a58dcdd
Author | SHA1 | Date | |
---|---|---|---|
|
b52a58dcdd | ||
|
f0ea440d41 | ||
|
8c995f4e00 | ||
|
d8880df87b | ||
|
e261ff5240 | ||
|
c4f08d05b5 | ||
|
d5ffd8f322 | ||
|
e2158064d3 | ||
|
8f87f107ad | ||
|
47926c3b58 | ||
|
3905e8566e | ||
|
b8070b972e | ||
|
fe7579693d | ||
|
8a6dabbed4 | ||
|
5a7369e2a4 | ||
|
34ef01a585 | ||
|
6d4d8134ca | ||
|
a1490c49b9 | ||
|
e7d1f13a2e | ||
|
51c664311b | ||
|
f1df6af76c | ||
|
f3376db8d3 | ||
|
9dcc29d3bf | ||
|
7f0041ff94 | ||
|
3ad28fbf2f | ||
|
2f411b9dd2 | ||
|
2851e6c2aa | ||
|
d2ddb53748 | ||
|
921f634605 | ||
|
21b7e6057a | ||
|
842ba58633 | ||
|
b1c3fae2e7 | ||
|
2025bd9507 | ||
|
8aa865cff9 | ||
|
7a89f5f089 | ||
|
d67023b3e2 | ||
|
9d8cb797fc | ||
|
6ebff0c56a | ||
|
ad9e42044f | ||
|
474c4ebb79 | ||
|
8ec5ea8d32 | ||
|
c61407a9ce | ||
|
06b8855f5f | ||
|
3e59aec9b3 | ||
|
988c816911 | ||
|
f622568945 | ||
|
e4aa4ed38c | ||
|
ed08bd9625 | ||
|
95be2f66e2 | ||
|
e9e1cde1a6 | ||
|
2d41942d8e | ||
|
e0a3ad9541 | ||
|
f9df0d73a2 | ||
|
ae3efc3503 | ||
|
65eaf02196 | ||
|
f276cac28f | ||
|
a45360b66b | ||
|
1c9a3e2a10 | ||
|
c1d9003c4c | ||
|
54824b4c62 | ||
|
c2af13606d | ||
|
246b646e69 | ||
|
3ceae2504b | ||
|
6d8d361bb3 | ||
|
f176f44a12 | ||
|
13809b58c2 | ||
|
a3c2606951 | ||
|
f37e445103 | ||
|
acdfbedbae | ||
|
fc2e323ba9 | ||
|
72390bf61b | ||
|
f66126186b | ||
|
b652b9f602 | ||
|
dbe5f66e13 | ||
|
76d0f16263 | ||
|
9b541ff994 | ||
|
e2727befda | ||
|
163c7946b8 | ||
|
eaac3448df | ||
|
93eb0f1f3c | ||
|
d1de68ba8f | ||
|
618d9524d5 | ||
|
8958ee7896 | ||
|
483ccfca9d | ||
|
93dd7abb03 | ||
|
cdc8c4ab9a | ||
|
6c6857ae64 | ||
|
273b2bb936 | ||
|
78cdc28c0d | ||
|
ac9f6ebb1c | ||
|
087cd7cb22 | ||
|
21a4fa3048 | ||
|
6f66b93c56 | ||
|
f5f091f47d | ||
|
9ec5e9847f | ||
|
45a953de72 | ||
|
b19045c75e | ||
|
1e355a3133 | ||
|
f3f755eed0 | ||
|
4e4e18f73a | ||
|
f118e207f6 | ||
|
66bf8de079 | ||
|
ef6e3fa1a3 |
8
.github/workflows/PULL_REQUEST_TEMPLATE.md
vendored
8
.github/workflows/PULL_REQUEST_TEMPLATE.md
vendored
|
@ -5,11 +5,11 @@
|
||||||
|
|
||||||
## Checklist
|
## Checklist
|
||||||
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->
|
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->
|
||||||
- [ ] I have read and followed the [Contribution Guidlines](https://github.com/hastagAB/Awesome-Python-Scripts#contribution-guidelines-) before creating this PR.
|
- [x] I have read and followed the [Contribution Guidlines](https://github.com/hastagAB/Awesome-Python-Scripts#contribution-guidelines-) before creating this PR.
|
||||||
- [ ] I've added a new Script
|
- [x] I've added a new Script
|
||||||
- [ ] Script is tested and running perfectly fine on my system
|
- [x] Script is tested and running perfectly fine on my system
|
||||||
- [ ] PR is regarding the Documetation
|
- [ ] PR is regarding the Documetation
|
||||||
- [ ] This change requires a documentation update
|
- [x] This change requires a documentation update
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
30
Attachment_Unique_Mail/README.md
Normal file
30
Attachment_Unique_Mail/README.md
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# Mass_Email_Unique_Attachments
|
||||||
|
Sends mails to a list of addresses, with different attachments.
|
||||||
|
Useful for mailing personalized certificates, layoff letters and wedding invitations.
|
||||||
|
Reads data from a CSV file with email addresses and the names of the files which are to be sent as attachments.
|
||||||
|
# Setup
|
||||||
|
- Create a folder containing all attachments which are to be sent
|
||||||
|
- Create a CSV file with two columns, the name of the attachment file, and the mail address of the receiver
|
||||||
|
- Add the path of the folder and CSV file in your script
|
||||||
|
# Usage
|
||||||
|
There are two scripts, the native script will use the Outlook or Windows Mail to send the mails. The mails will be sent from your currently logged-in mail id. This script is suitable for Windows.
|
||||||
|
The SMTP script allows you to setup a SMTP server to send mails. Follow the comment instructions in the script to setup an SMTP server. This requires you to allow alternative sign-in from your email provider.
|
||||||
|
The `smtp_server` depends on which mail provider you are using. Common servers for major providers are:
|
||||||
|
- Yahoo!
|
||||||
|
- smtp.mail.yahoo.com
|
||||||
|
- Gmail
|
||||||
|
- smtp.gmail.com
|
||||||
|
- Outlook
|
||||||
|
- smtp.office365.com / smtp-mail.outlook.com
|
||||||
|
|
||||||
|
The password to be entered in `smtp_password` is generated from your email provider settings.
|
||||||
|
- https://hotter.io/docs/email-accounts/secure-app-gmail/
|
||||||
|
- https://superuser.com/questions/1521236/how-to-allow-less-secure-app-access-in-microsoft-email
|
||||||
|
- https://help.inspectionsupport.com/en/articles/392427-enable-less-secure-apps-for-smtp-use-isn-yahoo-mail
|
||||||
|
|
||||||
|
The first script is suitable for users who don't wish to setup an SMTP server, or don't want to generate a less secure key.
|
||||||
|
|
||||||
|
# Alteration
|
||||||
|
You can modify the code to change the type of attachments being sent, for example instead of PDFs, you can send Word documents by changing the `pdf_file_name = row['name'] + '.pdf'` to `pdf_file_name = row['name'] + '.docx'`. For images, use .png, .jpg, etc.
|
||||||
|
|
||||||
|
You can also comment out the CC option if you don't wish to CC the mail to anyone.
|
37
Attachment_Unique_Mail/native_script.py
Normal file
37
Attachment_Unique_Mail/native_script.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
import win32com.client
|
||||||
|
import pandas as pd
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Load the CSV file
|
||||||
|
csv_file = 'your_file_path_here' # Replace with the path to your CSV file, make sure to have \\ instead of \
|
||||||
|
df = pd.read_csv(csv_file)
|
||||||
|
|
||||||
|
# Path to the folder containing the PDFs
|
||||||
|
pdf_folder_path = 'your_folder_here' # Add the attachment folder you wish to send (name them as per the CSV file)
|
||||||
|
|
||||||
|
# Outlook setup
|
||||||
|
ol = win32com.client.Dispatch("outlook.application")
|
||||||
|
olmailitem = 0x0
|
||||||
|
|
||||||
|
# Sending each mail
|
||||||
|
for index, row in df.iterrows():
|
||||||
|
|
||||||
|
newmail = ol.CreateItem(olmailitem)
|
||||||
|
newmail.Subject = 'enter_subject_here'
|
||||||
|
newmail.To = row['email'] # Assuming your CSV has a column named 'email' with the mail address
|
||||||
|
newmail.CC = '' # cc; optional
|
||||||
|
newmail.Body = '' # text contents of your mail
|
||||||
|
|
||||||
|
# PDF file name and path
|
||||||
|
pdf_file_name = row['name'] + '.pdf' # Assuming your CSV has a column named 'name'
|
||||||
|
pdf_file_path = os.path.join(pdf_folder_path, pdf_file_name)
|
||||||
|
|
||||||
|
|
||||||
|
if os.path.exists(pdf_file_path):
|
||||||
|
newmail.Attachments.Add(pdf_file_path)
|
||||||
|
else:
|
||||||
|
print(f"PDF file not found for {row['name']}")
|
||||||
|
|
||||||
|
newmail.Send()
|
||||||
|
|
||||||
|
# Note: This script will send emails as soon as it's run. Be careful!
|
BIN
Attachment_Unique_Mail/requirements.txt
Normal file
BIN
Attachment_Unique_Mail/requirements.txt
Normal file
Binary file not shown.
52
Attachment_Unique_Mail/smtp_script.py
Normal file
52
Attachment_Unique_Mail/smtp_script.py
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
import pandas as pd
|
||||||
|
import os
|
||||||
|
import smtplib
|
||||||
|
from email.message import EmailMessage
|
||||||
|
from email.mime.base import MIMEBase
|
||||||
|
from email import encoders
|
||||||
|
|
||||||
|
# Load the CSV file
|
||||||
|
csv_file = 'file_path' # CSV Path
|
||||||
|
df = pd.read_csv(csv_file)
|
||||||
|
|
||||||
|
# Path to the folder containing the PDFs
|
||||||
|
pdf_folder_path = 'Attachment_folder_path' # Add the attachment folder you wish to send (name them as per the CSV file)
|
||||||
|
|
||||||
|
# Email server configuration
|
||||||
|
smtp_server = '' # Replace with your SMTP server
|
||||||
|
smtp_port = 587 # Replace with your SMTP port (commonly 587 for TLS)
|
||||||
|
smtp_user = '' # Replace with your email address
|
||||||
|
smtp_password = '' # Replace with your unique access password (typically 16 letter generated through your email provider's settings)
|
||||||
|
|
||||||
|
# Sending each mail
|
||||||
|
for index, row in df.iterrows():
|
||||||
|
# Create a new email message
|
||||||
|
msg = EmailMessage()
|
||||||
|
msg['Subject'] = 'enter_subject_here'
|
||||||
|
msg['From'] = smtp_user
|
||||||
|
msg['To'] = row['email'] # Assuming your CSV has a column named 'email' for the address
|
||||||
|
msg['CC'] = '' # CC; optional
|
||||||
|
msg.set_content('') # The text contents of the mail
|
||||||
|
|
||||||
|
# PDF file name and path
|
||||||
|
pdf_file_name = row['name'] + '.pdf' # Assuming your CSV has a column named 'name' for the person you are sending to
|
||||||
|
pdf_file_path = os.path.join(pdf_folder_path, pdf_file_name)
|
||||||
|
|
||||||
|
# Check if the PDF file exists and attach it
|
||||||
|
if os.path.exists(pdf_file_path):
|
||||||
|
with open(pdf_file_path, 'rb') as f:
|
||||||
|
file_data = f.read()
|
||||||
|
file_type = 'application/pdf'
|
||||||
|
file_name = pdf_file_name
|
||||||
|
|
||||||
|
msg.add_attachment(file_data, maintype='application', subtype='pdf', filename=file_name)
|
||||||
|
else:
|
||||||
|
print(f"PDF file not found for {row['name']}")
|
||||||
|
|
||||||
|
# Send the email
|
||||||
|
with smtplib.SMTP(smtp_server, smtp_port) as server:
|
||||||
|
server.starttls()
|
||||||
|
server.login(smtp_user, smtp_password)
|
||||||
|
server.send_message(msg)
|
||||||
|
|
||||||
|
# This script will send emails as soon as it's run. Be careful!
|
|
@ -31,11 +31,33 @@ You can see what all you changes using the `git status` command.
|
||||||
## 4. Add all you changes
|
## 4. Add all you changes
|
||||||
Add all your changes to you branch using the `git add .` command
|
Add all your changes to you branch using the `git add .` command
|
||||||
|
|
||||||
|
## 5. Commit your changes
|
||||||
|
Commit your changes to your branch using `git commit -m "commit message"` command.
|
||||||
|
|
||||||
|
## Commit Message Conventions
|
||||||
|
|
||||||
|
- Start with a short summary (50 characters or less) of the changes made.
|
||||||
|
- Use the present tense and imperative mood.
|
||||||
|
- Separate the summary from the body of the message with a blank line.
|
||||||
|
- Use the body to explain what and why changes were made, as well as any necessary details.
|
||||||
|
- Additionally, you can consider using [semantic commit messages](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716?permalink_comment_id=3867882) like "feat:", "docs:", etc. which will provide additional context to the commit message.
|
||||||
|
|
||||||
|
| Commit Type | Description |
|
||||||
|
| ---- | ---- |
|
||||||
|
| `feat` | New feature or functionality added |
|
||||||
|
| `fix` | Bug fix |
|
||||||
|
| `docs` | Changes to documentation |
|
||||||
|
| `test` | Adding or updating tests |
|
||||||
|
| `chore` | Maintenance tasks such as refactoring, dependencies updates, or removing unused code |
|
||||||
|
| `ci` | Changes to the build or continuous integration process |
|
||||||
|
|
||||||
## 5. Push you changes to GitHub
|
## 5. Push you changes to GitHub
|
||||||
Switch to the main branch using this command:
|
Switch to the master branch using this command:
|
||||||
|
|
||||||
```git checkout master```
|
```git checkout master```
|
||||||
|
|
||||||
Push all your changes to GitHub using the command:
|
Push all your changes to GitHub using the command:
|
||||||
|
|
||||||
```git push --set-upstream origin <your_branch_name>```
|
```git push --set-upstream origin <your_branch_name>```
|
||||||
|
|
||||||
|
|
||||||
|
|
61
FileMagic_Organizer/README.md
Normal file
61
FileMagic_Organizer/README.md
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
## FileMagic Organizer - Unleash the Power of Order
|
||||||
|
|
||||||
|
Welcome to FileMagic Organizer, where chaos meets its match. This Python script is your ally in the battle against cluttered directories. FileMagic Organizer effortlessly sorts your files into designated categories, bringing harmony to the digital realm.
|
||||||
|
|
||||||
|
## Index
|
||||||
|
- [Introduction](#)
|
||||||
|
- [Key Features](#key-features)
|
||||||
|
- [Getting Started](#getting-started)
|
||||||
|
- [Options provided](#options-provided)
|
||||||
|
- [Usage](#usage)
|
||||||
|
- [Customization](#customization)
|
||||||
|
|
||||||
|
## Key Features:
|
||||||
|
|
||||||
|
- 🔮 **Magical Categorization:** FileMagic Organizer intelligently sorts files by type, creating a structured and easily navigable file system.
|
||||||
|
|
||||||
|
- 📅 **Chronological Arrangement:** Dive into the past with chronological organization, unveiling the history of your files in an orderly timeline.
|
||||||
|
|
||||||
|
📏 **Size-based Sorting:** Experience the wizardry of size-based categorization, with files neatly grouped into small, medium, and large categories.
|
||||||
|
|
||||||
|
## **Getting Started:**
|
||||||
|
|
||||||
|
1. ⚡ **Clone the Repository:** Embrace the magic by cloning the FileMagic Organizer repository.
|
||||||
|
|
||||||
|
2. 🚀 **Install Dependencies:** Initiate the enchantment with a quick installation of the required Python libraries.
|
||||||
|
|
||||||
|
3. ✨ **Run the Magic Spell:** Execute the script, follow the prompts, and witness the transformation as FileMagic Organizer weaves its organizational magic.
|
||||||
|
|
||||||
|
## Options provided
|
||||||
|
|
||||||
|
- Organize files by type (e.g., images, documents, videos).
|
||||||
|
- Organize files by creation date into a hierarchical structure of year and month.
|
||||||
|
- Categorize files by size into small, medium, and large categories.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. **Clone the Repository:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/malivinayak/file-organizer.git
|
||||||
|
cd file-organizer
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Install Dependencies:**
|
||||||
|
|
||||||
|
Ensure you have Python installed. Install the required libraries:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Run the Script:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python organize_files.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
- Adjust the file type categories, file extensions, and any other settings in the script based on your needs.
|
||||||
|
- Modify the size categories and ranges in the script for organizing files by size.
|
104
FileMagic_Organizer/main.py
Normal file
104
FileMagic_Organizer/main.py
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
def categorize_by_size(file_size):
|
||||||
|
# Define size categories and their ranges in bytes
|
||||||
|
size_categories = {
|
||||||
|
'small': (0, 1024), # Up to 1 KB
|
||||||
|
'medium': (1025, 1024 * 1024), # 1 KB to 1 MB
|
||||||
|
'large': (1024 * 1025, float('inf')) # Larger than 1 MB
|
||||||
|
}
|
||||||
|
|
||||||
|
for category, (min_size, max_size) in size_categories.items():
|
||||||
|
if min_size <= file_size < max_size:
|
||||||
|
return category
|
||||||
|
|
||||||
|
return 'unknown'
|
||||||
|
|
||||||
|
def organize_files(source_dir, destination_dir, organize_by_type=True, organize_by_date=True, organize_by_size=True):
|
||||||
|
# Create a dictionary to map file extensions to corresponding folders
|
||||||
|
file_types = {
|
||||||
|
'images': ['.png', '.jpg', '.jpeg', '.gif'],
|
||||||
|
'documents': ['.pdf', '.docx', '.txt'],
|
||||||
|
'videos': ['.mp4', '.avi', '.mkv'],
|
||||||
|
'other': [] # Add more categories and file extensions as needed
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create destination subdirectories if they don't exist
|
||||||
|
if organize_by_type:
|
||||||
|
for folder in file_types:
|
||||||
|
folder_path = os.path.join(destination_dir, folder)
|
||||||
|
os.makedirs(folder_path, exist_ok=True)
|
||||||
|
|
||||||
|
if organize_by_date:
|
||||||
|
for year in range(2010, 2030): # Adjust the range based on your needs
|
||||||
|
year_folder = os.path.join(destination_dir, str(year))
|
||||||
|
os.makedirs(year_folder, exist_ok=True)
|
||||||
|
|
||||||
|
for month in range(1, 13):
|
||||||
|
month_folder = os.path.join(year_folder, f"{month:02d}")
|
||||||
|
os.makedirs(month_folder, exist_ok=True)
|
||||||
|
|
||||||
|
if organize_by_size:
|
||||||
|
for size_category in ['small', 'medium', 'large']:
|
||||||
|
size_folder = os.path.join(destination_dir, size_category)
|
||||||
|
os.makedirs(size_folder, exist_ok=True)
|
||||||
|
|
||||||
|
# Scan the source directory and organize files
|
||||||
|
for filename in os.listdir(source_dir):
|
||||||
|
file_path = os.path.join(source_dir, filename)
|
||||||
|
|
||||||
|
if os.path.isfile(file_path):
|
||||||
|
# Determine the file type based on extension
|
||||||
|
file_type = None
|
||||||
|
for category, extensions in file_types.items():
|
||||||
|
if any(filename.lower().endswith(ext) for ext in extensions):
|
||||||
|
file_type = category
|
||||||
|
break
|
||||||
|
|
||||||
|
if organize_by_type and file_type:
|
||||||
|
# Move the file to the corresponding subdirectory
|
||||||
|
destination_folder = os.path.join(destination_dir, file_type)
|
||||||
|
destination_path = os.path.join(destination_folder, filename)
|
||||||
|
shutil.move(file_path, destination_path)
|
||||||
|
print(f"Moved: {filename} to {file_type} folder")
|
||||||
|
|
||||||
|
if organize_by_date:
|
||||||
|
# Get the creation date of the file
|
||||||
|
creation_time = os.path.getctime(file_path)
|
||||||
|
creation_date = datetime.datetime.fromtimestamp(creation_time)
|
||||||
|
|
||||||
|
# Determine the destination folder based on creation date
|
||||||
|
destination_folder = os.path.join(
|
||||||
|
destination_dir,
|
||||||
|
str(creation_date.year),
|
||||||
|
f"{creation_date.month:02d}",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Move the file to the corresponding subdirectory
|
||||||
|
destination_path = os.path.join(destination_folder, filename)
|
||||||
|
shutil.move(file_path, destination_path)
|
||||||
|
print(f"Moved: {filename} to {creation_date.year}/{creation_date.month:02d} folder")
|
||||||
|
|
||||||
|
if organize_by_size:
|
||||||
|
# Get the size of the file in bytes
|
||||||
|
file_size = os.path.getsize(file_path)
|
||||||
|
|
||||||
|
# Determine the destination folder based on file size
|
||||||
|
size_category = categorize_by_size(file_size)
|
||||||
|
destination_folder = os.path.join(destination_dir, size_category)
|
||||||
|
destination_path = os.path.join(destination_folder, filename)
|
||||||
|
shutil.move(file_path, destination_path)
|
||||||
|
print(f"Moved: {filename} to {size_category} folder")
|
||||||
|
|
||||||
|
# Get source and destination directories from the user
|
||||||
|
source_directory = input("Enter the source directory path: ")
|
||||||
|
destination_directory = input("Enter the destination directory path: ")
|
||||||
|
|
||||||
|
# Ask the user how they want to organize the files
|
||||||
|
organize_by_type = input("Organize by file type? (yes/no): ").lower() == 'yes'
|
||||||
|
organize_by_date = input("Organize by creation date? (yes/no): ").lower() == 'yes'
|
||||||
|
organize_by_size = input("Organize by size? (yes/no): ").lower() == 'yes'
|
||||||
|
|
||||||
|
organize_files(source_directory, destination_directory, organize_by_type, organize_by_date, organize_by_size)
|
33
Github-Review-Bot/README.md
Normal file
33
Github-Review-Bot/README.md
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# GitHub Pull Request Review Script
|
||||||
|
|
||||||
|
This Python script allows you to automatically review all pull requests in a specified GitHub repository.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
Before you can use this script, ensure you have the following:
|
||||||
|
|
||||||
|
- Python installed on your system.
|
||||||
|
- The `selenium` Python package. You can install it using `pip`:
|
||||||
|
|
||||||
|
```
|
||||||
|
pip install selenium
|
||||||
|
```
|
||||||
|
|
||||||
|
- [GeckoDriver](https://github.com/mozilla/geckodriver) for Firefox. Make sure to download the correct version for your system. Or you can replace `FireFox()` with your own webdriver
|
||||||
|
|
||||||
|
- A GitHub account with the necessary access rights to review pull requests in the target repository.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. Clone or download this repository to your local machine.
|
||||||
|
|
||||||
|
2. Open the script `github_pull_request_review.py` in a text editor or Python IDE.
|
||||||
|
|
||||||
|
3. Run the script by executing:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py
|
||||||
|
```
|
||||||
|
4. Answer the prompt
|
||||||
|
|
||||||
|
5. The script will start add review comments.
|
57
Github-Review-Bot/main.py
Normal file
57
Github-Review-Bot/main.py
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# Python Script to review all the pull request of mentioned repository
|
||||||
|
|
||||||
|
from selenium.webdriver import Firefox, ActionChains
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
import random
|
||||||
|
from selenium.webdriver.common.keys import Keys
|
||||||
|
|
||||||
|
username = None
|
||||||
|
password = None
|
||||||
|
|
||||||
|
class Github:
|
||||||
|
|
||||||
|
def __init__(self, repo_owner, repo_name):
|
||||||
|
self.base_url = "https://github.com/"
|
||||||
|
self.repo_owner = repo_owner
|
||||||
|
self.repo_name = repo_name
|
||||||
|
self.isLogin = False
|
||||||
|
self.driver = Firefox()
|
||||||
|
self.pull_requests = None
|
||||||
|
|
||||||
|
def login(self):
|
||||||
|
self.driver.get(self.base_url+"/login")
|
||||||
|
self.driver.find_element(by=By.ID, value="login_field").send_keys(username)
|
||||||
|
self.driver.find_element(by=By.ID, value="password").send_keys(password)
|
||||||
|
self.driver.find_element(by=By.NAME, value="commit").click()
|
||||||
|
self.isLogin = True
|
||||||
|
|
||||||
|
def writeReview(self):
|
||||||
|
if not self.isLogin:
|
||||||
|
self.login()
|
||||||
|
|
||||||
|
self.driver.get(self.base_url+self.repo_owner+"/"+self.repo_name+"/pulls")
|
||||||
|
self.driver.implicitly_wait(10)
|
||||||
|
pull_requests = self.driver.find_elements(by=By.XPATH, value="//a[@data-hovercard-type='pull_request']")
|
||||||
|
self.pull_requests = [pull_request.get_attribute("href") for pull_request in pull_requests]
|
||||||
|
|
||||||
|
for pull_request in self.pull_requests:
|
||||||
|
self.driver.get(pull_request+"/files")
|
||||||
|
self.driver.implicitly_wait(10)
|
||||||
|
self.driver.find_element(by=By.ID, value="review-changes-modal").click()
|
||||||
|
self.driver.implicitly_wait(10)
|
||||||
|
self.driver.find_element(by=By.ID, value="pull_request_review[event]_approve").click()
|
||||||
|
self.driver.implicitly_wait(10)
|
||||||
|
self.driver.find_element(by=By.ID, value="pull_request_review_body").send_keys(random.choice(["LGTM", "Looks good to me", "LGTM, thanks for the contribution", "Seems good to me!"]))
|
||||||
|
self.driver.implicitly_wait(10)
|
||||||
|
ActionChains(self.driver).key_down(Keys.CONTROL).send_keys(Keys.ENTER).key_up(Keys.CONTROL).perform()
|
||||||
|
self.driver.implicitly_wait(10)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
username = input("Enter your username: ")
|
||||||
|
password = input("Enter your password: ")
|
||||||
|
|
||||||
|
github_owner = input("Enter the repository owner: ")
|
||||||
|
github_repo = input("Enter the repository name: ")
|
||||||
|
github = Github(github_owner, github_repo)
|
||||||
|
github.writeReview()
|
1
Github-Review-Bot/requirements.txt
Normal file
1
Github-Review-Bot/requirements.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
selenium
|
|
@ -1,5 +1,5 @@
|
||||||
certifi==2022.12.7
|
certifi==2023.7.22
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
idna==2.10
|
idna==2.10
|
||||||
requests==2.24.0
|
requests==2.31.0
|
||||||
urllib3==1.26.5
|
urllib3==1.26.18
|
||||||
|
|
|
@ -2,11 +2,18 @@ import PIL
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from tkinter.filedialog import *
|
from tkinter.filedialog import *
|
||||||
|
|
||||||
file_path=askopenfilenames()
|
file_paths = askopenfilenames()
|
||||||
img = PIL.Image.open(file_path)
|
|
||||||
myHeight,myWidth = img.size
|
|
||||||
|
|
||||||
img=img.resize((myHeight,myWidth),PIL.Image.ANTILIAS)
|
if len(file_paths) == 0:
|
||||||
save_path=asksaveasfile()
|
print("No Files Selected")
|
||||||
|
|
||||||
img.save(save_path+"_compressed.JPG")
|
for file in file_paths:
|
||||||
|
file_name = file.split('/')[-1]
|
||||||
|
file_name, extension = file_name.split('.')
|
||||||
|
|
||||||
|
img = PIL.Image.open(file)
|
||||||
|
height,width = img.size
|
||||||
|
img=img.resize((height,width),Image.Resampling.LANCZOS)
|
||||||
|
|
||||||
|
save_path=askdirectory()
|
||||||
|
img.save(save_path+f"/{file_name}_compressed.{extension}")
|
|
@ -7,5 +7,7 @@ It automates the task of compressing the image in day to day lives.
|
||||||
|
|
||||||
# Dependencies:
|
# Dependencies:
|
||||||
|
|
||||||
pip install image
|
Note : Use python3.11 for tkinder
|
||||||
|
|
||||||
|
`pip install pillow`
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
astroid==2.1.0
|
astroid==2.1.0
|
||||||
autopep8==1.4.3
|
autopep8==1.4.3
|
||||||
certifi==2022.12.7
|
certifi==2023.7.22
|
||||||
colorama==0.4.1
|
colorama==0.4.1
|
||||||
isort==4.3.4
|
isort==4.3.4
|
||||||
lazy-object-proxy==1.3.1
|
lazy-object-proxy==1.3.1
|
||||||
|
|
74
PDF_Password_Decrypter/README.md
Normal file
74
PDF_Password_Decrypter/README.md
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
# Decrypt Your Password Protected pdf files Here
|
||||||
|
**Pdf-Password-Decrypter is a Python application that can be used to decrypt PDF files that are password-protected. This is optimised for Linux with apt**
|
||||||
|
|
||||||
|
# Features
|
||||||
|
+ Allows users to select a password-protected PDF file to be decrypted.
|
||||||
|
+ Provides an entry widget for the user to enter the password for the PDF file.
|
||||||
|
+ Allows users to enter a new name for the decrypted PDF file.
|
||||||
|
+ Creates a new PDF file that is not password-protected.
|
||||||
|
+ Allows users to view the decrypted PDF file in the Evince PDF viewer.
|
||||||
|
|
||||||
|
# Upcoming featuers
|
||||||
|
Some of the upcoming features include:
|
||||||
|
+ Editing the pdf directly.
|
||||||
|
+ Lock the pdf with a new password.
|
||||||
|
+ Unlocking encrypted pdf files with Brute Force attack.
|
||||||
|
+ Better UI design.
|
||||||
|
+ Replace tkinter with Kivy module of python.
|
||||||
|
+ Switch from PyPDF2 to some other python modules as it is no longer maintained.
|
||||||
|
|
||||||
|
# Pre-requisites
|
||||||
|
To run this Python program you would need these following packages
|
||||||
|
+ Python(version 3.7 or higher)
|
||||||
|
+ Tkinter python package
|
||||||
|
+ PyPDF2 python package(no longer maintained)
|
||||||
|
+ Evince pdf viewer
|
||||||
|
+ GIT
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
You need to install all the prerequisites, follow the commands:
|
||||||
|
+ Installing python:
|
||||||
|
```
|
||||||
|
sudo apt install python3 -y
|
||||||
|
```
|
||||||
|
|
||||||
|
+ Installing Tkinter python package:
|
||||||
|
```
|
||||||
|
sudo apt install python3-tk -y
|
||||||
|
```
|
||||||
|
|
||||||
|
+ Installing PyPDF2 python package:
|
||||||
|
```
|
||||||
|
pip install pypdf2
|
||||||
|
```
|
||||||
|
|
||||||
|
+ Installing Evince pdf viewer:
|
||||||
|
```
|
||||||
|
sudo apt install evince -y
|
||||||
|
```
|
||||||
|
|
||||||
|
+ Installing Git:
|
||||||
|
```
|
||||||
|
sudo apt install git -y
|
||||||
|
```
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
+ You need to first close this repository:
|
||||||
|
```
|
||||||
|
git clone https://github.com/parthasdey2304/Awesome-Python-Scripts.git
|
||||||
|
```
|
||||||
|
|
||||||
|
+ Getting inside the repository:
|
||||||
|
```
|
||||||
|
cd Awesome-Python-Scripts/PDF_Password_Decrypter
|
||||||
|
```
|
||||||
|
|
||||||
|
+ Running the python file:
|
||||||
|
```
|
||||||
|
python3 main.py
|
||||||
|
```
|
||||||
|
|
||||||
|
+ Done
|
||||||
|
|
||||||
|
|
||||||
|
# THANK YOU COMMUNITY!!!!
|
82
PDF_Password_Decrypter/main.py
Normal file
82
PDF_Password_Decrypter/main.py
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
import os
|
||||||
|
import PyPDF2
|
||||||
|
from tkinter import *
|
||||||
|
from tkinter import filedialog
|
||||||
|
|
||||||
|
# Create a GUI window using tkinter
|
||||||
|
root = Tk()
|
||||||
|
root.configure(background='grey')
|
||||||
|
root.title('PDF Password Remover')
|
||||||
|
root.geometry('300x350')
|
||||||
|
|
||||||
|
# this is the method select_file which when invoked uses filedialog to open a file and store the path of the file in the variable file_path
|
||||||
|
def select_file():
|
||||||
|
global file_path
|
||||||
|
file_path = filedialog.askopenfilename()
|
||||||
|
|
||||||
|
# Creating a label to show the file path
|
||||||
|
Label(root, text=file_path, bg='grey', fg='white').pack(pady=10)
|
||||||
|
|
||||||
|
# this is the method decrypt which when invoked decrypts the file using the password provided by the user
|
||||||
|
def decrypt():
|
||||||
|
passwd = password.get() # getting the password from the entry widget
|
||||||
|
|
||||||
|
# Opening the PDF file with a password
|
||||||
|
pdf_file = open(file_path, 'rb')
|
||||||
|
pdf_reader = PyPDF2.PdfReader(pdf_file)
|
||||||
|
if pdf_reader.is_encrypted:
|
||||||
|
pdf_reader.decrypt(passwd)
|
||||||
|
|
||||||
|
# Create a new PDF file without password protection
|
||||||
|
pdf_writer = PyPDF2.PdfWriter()
|
||||||
|
length = len(pdf_reader.pages)
|
||||||
|
for page_num in range(length):
|
||||||
|
pdf_writer.add_page(pdf_reader.pages[length - page_num - 1])
|
||||||
|
|
||||||
|
# Creating a new file with the name provided by the user
|
||||||
|
new_file_name = new_file.get()+".pdf"
|
||||||
|
new_pdf_file = open(new_file_name, 'wb')
|
||||||
|
pdf_writer.write(new_pdf_file)
|
||||||
|
|
||||||
|
# Closing the files
|
||||||
|
pdf_file.close()
|
||||||
|
new_pdf_file.close()
|
||||||
|
|
||||||
|
# Showing the file in a tkinter window
|
||||||
|
show_pdf()
|
||||||
|
|
||||||
|
# this is a method that has a canvas of 500x700 resizeable to show the pdf file
|
||||||
|
# def show_pdf():
|
||||||
|
# pdf_file = open(new_file.get()+".pdf", 'rb')
|
||||||
|
# pdf_reader = PyPDF2.PdfReader(pdf_file)
|
||||||
|
# page = pdf_reader.pages[0]
|
||||||
|
# page_content = page.extract_text()
|
||||||
|
# print(page_content)
|
||||||
|
# pdf_file.close()
|
||||||
|
|
||||||
|
def show_pdf():
|
||||||
|
pdf_file = new_file.get()+".pdf"
|
||||||
|
os.system(f"evince {pdf_file}")
|
||||||
|
|
||||||
|
|
||||||
|
# Button to choose the file to be decrypted
|
||||||
|
Button(root, text='Select File', bg='white', font=('arial', 12, 'normal'), command=select_file).pack(pady=20)
|
||||||
|
|
||||||
|
# Label widget to show the password
|
||||||
|
Label(root, text='Password: ', bg='grey', fg = 'white', font=('arial', 12, 'normal')).pack()
|
||||||
|
|
||||||
|
# Entry widget to accept the password
|
||||||
|
password = Entry(root,text='Password', width=20, font=('arial', 12, 'normal'), show='*', border=2)
|
||||||
|
password.pack(pady=20)
|
||||||
|
|
||||||
|
# Label widget to show the name with which the new file would be stored
|
||||||
|
Label(root, text='New File Name:', bg='grey', fg = 'white', font=('arial', 12, 'normal')).pack()
|
||||||
|
|
||||||
|
# Entry widget to accept the name with which the new file would be stored
|
||||||
|
new_file = Entry(root,text='New File Name', width=20, font=('arial', 12, 'normal'), border=2)
|
||||||
|
new_file.pack(pady=20)
|
||||||
|
|
||||||
|
# Button to decrypt the file
|
||||||
|
Button(root, text='Decrypt', bg='white', font=('arial', 12, 'normal'), command=decrypt).pack(pady=20)
|
||||||
|
|
||||||
|
root.mainloop()
|
44
PDFsplitter/PDFsplitter.py
Normal file
44
PDFsplitter/PDFsplitter.py
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
import PyPDF2
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def split_pdf(input_pdf_path, output_folder):
|
||||||
|
# Open the PDF file
|
||||||
|
pdf_file = open(input_pdf_path, "rb")
|
||||||
|
input_pdf_name = os.path.basename(input_pdf_path).split(".")[0]
|
||||||
|
pdf_reader = PyPDF2.PdfReader(pdf_file)
|
||||||
|
|
||||||
|
# Create the output folder if it doesn't exist
|
||||||
|
os.makedirs(output_folder, exist_ok=True)
|
||||||
|
|
||||||
|
# Loop through each page and save it as a separate PDF file
|
||||||
|
for page_num in range(len(pdf_reader.pages)):
|
||||||
|
pdf_writer = PyPDF2.PdfWriter()
|
||||||
|
pdf_writer.add_page(pdf_reader.pages[page_num])
|
||||||
|
|
||||||
|
output_pdf_path = os.path.join(
|
||||||
|
output_folder, f"{input_pdf_name}_{page_num + 1}.pdf"
|
||||||
|
)
|
||||||
|
|
||||||
|
with open(output_pdf_path, "wb") as output_pdf:
|
||||||
|
pdf_writer.write(output_pdf)
|
||||||
|
print(f"Page {page_num + 1} saved as {output_pdf_path}")
|
||||||
|
|
||||||
|
# Close the input PDF file
|
||||||
|
pdf_file.close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Split a PDF file into separate pages")
|
||||||
|
parser.add_argument(
|
||||||
|
"input_pdf", help="Input PDF file path")
|
||||||
|
parser.add_argument(
|
||||||
|
"output_folder", help="Output folder path for split pages")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
input_pdf_path = args.input_pdf
|
||||||
|
output_folder = args.output_folder
|
||||||
|
|
||||||
|
split_pdf(input_pdf_path, output_folder)
|
22
PDFsplitter/README.md
Normal file
22
PDFsplitter/README.md
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
## PDFsplitter
|
||||||
|
|
||||||
|
This Python script allows you to split a PDF file into separate PDF files, one for each page. It uses the PyPDF2 library to perform the splitting.
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
1. Make sure you have Python 3.x installed on your system.
|
||||||
|
|
||||||
|
2. Install the required PyPDF2 library using pip:
|
||||||
|
```pip install PyPDF2```
|
||||||
|
|
||||||
|
3. Run the script with the following command:
|
||||||
|
|
||||||
|
`python PDFsplitter.py input_pdf output_folder`
|
||||||
|
- `input_pdf`: The path to the input PDF file that you want to split.
|
||||||
|
- `output_folder`: The folder where the split PDF pages will be saved.
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
To split an input PDF file named `input.pdf` into separate pages and save them in an `output_pages` folder, you can run the following command:
|
||||||
|
|
||||||
|
python PDFsplitter.py input.pdf output_pages
|
1
PDFsplitter/requirements.txt
Normal file
1
PDFsplitter/requirements.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
PyPDF2==3.0.1
|
|
@ -1,3 +1,3 @@
|
||||||
numpy==1.22.0
|
numpy==1.22.0
|
||||||
opencv-python==4.1.1.26
|
opencv-python==4.1.1.26
|
||||||
Pillow==9.3.0
|
Pillow==10.2.0
|
||||||
|
|
348
README.md
348
README.md
|
@ -1,15 +1,18 @@
|
||||||
# Awesome Python Scripts :sunglasses: <img alt="PyPI" src="https://warehouse-camo.cmh1.psfhosted.org/18509a25dde64f893bd96f21682bd6211c3d4e80/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f64796e61636f6e662e737667"> [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/hastagAB/Awesome-Python-Scripts) ![GitHub stars](https://img.shields.io/github/stars/hastagAB/Awesome-Python-Scripts?style=social)
|
# Awesome Python Scripts :snake:
|
||||||
|
|
||||||
|
<img alt="PyPI" src="https://pypi.org/static/images/logo-small.8998e9d1.svg" height="30px" width="auto"> [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/hastagAB/Awesome-Python-Scripts) ![GitHub stars](https://img.shields.io/github/stars/hastagAB/Awesome-Python-Scripts?style=social)
|
||||||
|
|
||||||
|
|
||||||
## Contents:
|
## Contents:
|
||||||
|
|
||||||
- [What is this repo?](#what-is-this-repo)
|
- [Awesome Python Scripts :sunglasses: ](#awesome-python-scripts-sunglasses----)
|
||||||
- [What do we have?](#what-do-we-have)
|
- [Contents:](#contents)
|
||||||
- [How to use?](#how-to-use)
|
- [What is this repo?](#what-is-this-repo)
|
||||||
- [Contribution Guidelines](#contributions-guidelines)
|
- [What do we have:](#what-do-we-have)
|
||||||
- [Steps required to follow before adding any script](#steps-required-to-follow-before-adding-any-script)
|
- [How to use:](#how-to-use)
|
||||||
- [Contribution Guidelines](#contributions-guidelines)
|
- [Contribution Guidelines:](#contribution-guidelines)
|
||||||
- [If you like the project](#if-you-like-the-project)
|
- [Steps required to follow before adding any script](#steps-required-to-follow-before-adding-any-script)
|
||||||
|
- [If you like the project:](#if-you-like-the-project)
|
||||||
- [Want to connect with me?](#want-to-connect-with-me)
|
- [Want to connect with me?](#want-to-connect-with-me)
|
||||||
|
|
||||||
## What is this repo?
|
## What is this repo?
|
||||||
|
@ -22,194 +25,141 @@ So far, the following projects have been integrated to this repo:
|
||||||
|
|
||||||
| Project Name | Contributors |
|
| Project Name | Contributors |
|
||||||
|--|--|
|
|--|--|
|
||||||
| [TicTacToe AI and 2 players](https://github.com/ShadowHunter15/Awesome-Python-Scripts/tree/master/TicTacToe_AI_and_2_players) | [Omar Sameh](https://github.com/ShadowHunter15) |
|
|[2048](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/2048)|[Krunal](https://github.com/gitkp11)|
|
||||||
| [AI for guess the number](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/AI_for_Guess_the_number) | [Omar Sameh](https://github.com/ShadowHunter15) |
|
|[AI chatbot](Artificial-intelligence_bot) |[umar abdullahi](https://github.com/umarbrowser) |
|
||||||
| [sudoku-solver](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/sudoku-solver) | [Rishabh Umrao](https://github.com/ayedaemon) |
|
|[AI for guess the number](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/AI_for_Guess_the_number) | [Omar Sameh](https://github.com/ShadowHunter15) |
|
||||||
|[File Encrypt Decrypt](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/file-encrypt-decrypt)|[Aditya Arakeri](https://github.com/adityaarakeri)|
|
|[Address locator](Location_Of_Adress) | [Chris]() |
|
||||||
| [Address locator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Location_Of_Adress) | [Chris]() |
|
|[Asymmetric Encryption](asymmetric_cryptography) |[victor matheus](https://github.com/victormatheusc) |
|
||||||
| [Automated emails](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/automated_email) | [Suvigya](https://github.com/SuvigyaJain1) |
|
|[Attachment Unique Mail](Attachment_Unique_Mail) |[Arnav Dandekar](https://github.com/4rnv) |
|
||||||
|[AI chatbot](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Artificial-intelligence_bot) |[umar abdullahi](https://github.com/umarbrowser) |
|
|[Automated calendar](automated_calendar) | [J.A. Hernández](https://github.com/jesusalberto18) |
|
||||||
|[Asymmetric Encryption](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/asymmetric_cryptography) |[victor matheus](https://github.com/victormatheusc) |
|
|[Automated emails](automated_email) | [Suvigya](https://github.com/SuvigyaJain1) |
|
||||||
|[Bitcoin price GUI](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Bitcoin-Price-GUI) |[Amirul Abu](https://github.com/amirulabu) |
|
|[Battery_notification](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Battery_notification/)|[Krishna Sharma](https://github.com/krishnasharma1386)|
|
||||||
|[Better_CSV_Storage](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Better_CSV_Storage) | [Bhargav Kuvadiya](https://github.com/techdobz) |
|
|[Better_CSV_Storage](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Better_CSV_Storage) | [Bhargav Kuvadiya](https://github.com/techdobz) |
|
||||||
|[Cryptocurrency Converter](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Cryptocurrency-converter) |[AdnCodz](https://github.com/AdnCodez) |
|
|[Bitcoin price GUI](Bitcoin-Price-GUI) |[Amirul Abu](https://github.com/amirulabu) |
|
||||||
|[Cryptocurrency Prices](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Cryptocurrency-Prices) |[xemeds](https://github.com/xemeds) |
|
|[CLI Calculator](cli_calculator)|[Willian GL](https://github.com/williangl) |
|
||||||
|[Caesar Cipher](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/caesar_cipher) |[epi052](https://github.com/epi052) |
|
|[COVID visualiser (real-time) ](covid_visualiser)|[Tushar Gupta](https://github.com/tushar5526)|
|
||||||
|[Checksum tool](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Checksum) |[Austin Ewens](https://github.com/aewens) |
|
|[CSV to Excel](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/CSV-to-Excel)|[xemeds](https://github.com/xemeds) |
|
||||||
|[Codechef autosubmitter](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Codechef-Code-Submitter) |[Harshit Mahajan](https://github.com/hmahajan99) |
|
|[Caesar Cipher](caesar_cipher) |[epi052](https://github.com/epi052) |
|
||||||
|[Colored B&W Image Converter](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Color_to_BW_Converter) |[Nitish Srivastava](https://github.com/nitish-iiitd) |
|
|[Checksum tool](Checksum) |[Austin Ewens](https://github.com/aewens) |
|
||||||
|[Contact 'Leads' Distribution](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Contact-Distribution) |[Tiago Cordeiro](https://github.com/tiagocordeiro) |
|
|[Clean_up_photo](Clean_up_photo_directory)|[sritanmay001](https://github.com/sritanmy001)|
|
||||||
|[Cricket Matches web Scraper](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/CricBuzz_Score_Update) |[Divy Ranjan](https://github.com/divyranjan17) |
|
|[Codechef autosubmitter](Codechef-Code-Submitter) |[Harshit Mahajan](https://github.com/hmahajan99) |
|
||||||
| [Crypt socket](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Crypt_Socket)|[Willian GL](https://github.com/williangl) |
|
|[Codeforces Checker](codeforcesChecker)|[Jinesh Parakh](https://github.com/jineshparakh)|
|
||||||
| [CSV to Excel](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/CSV-to-Excel)|[xemeds](https://github.com/xemeds) |
|
|[Colored B&W Image Converter](Color_to_BW_Converter) |[Nitish Srivastava](https://github.com/nitish-iiitd) |
|
||||||
|[Current City Weather](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Current_City_Weather) |[Jesse Bridge](https://github.com/jessebridge) |
|
|[Contact 'Leads' Distribution](Contact-Distribution) |[Tiago Cordeiro](https://github.com/tiagocordeiro) |
|
||||||
|[Directory organizer](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Directory-organizer) | [Athul P](https://github.com/athulpn) |
|
|[Countdown](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Countdown)|[Jeremias Gomes](https://github.com/j3r3mias)|
|
||||||
|[Database-As-Storage](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Database-As-Storage) | [Bhargav Kuvadiya](https://github.com/techdobz) |
|
|[csv_to_json](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/csv_to_json)|[MoiZ](https://github.com/TechBoyy6)|
|
||||||
|[DOH DIG](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/DOH-Dig/) | [Ryan](https://github.com/awsumco) |
|
|
||||||
|[English Theasaurus](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/English_Theasaurus/) | [Ansh Dhingra](https://github.com/anshdhinhgra47) |
|
|
||||||
|[Elasticsearch snapshot](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/elastic-snapshot) | [Joe Ryan](https://github.com/joeryan) |
|
|
||||||
|[Excel Files Merger](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Excel_Files_Merger) | [Andrei N](https://github.com/Andrei-Niculae)|
|
|
||||||
|[Excel to List](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Excel_to_ListofList) | [Nitish Srivastava](https://github.com/nitish-iiitd)|
|
|
||||||
|[Extended_ip_address_info](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/extended_ip_address_info) | [hafpaf](https://github.com/hafpaf)|
|
|
||||||
|[File explorer](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/File-Explorer-Dialog-Box) | [Nikhil Kumar Singh](https://github.com/nikhilkumarsingh)|
|
|
||||||
|[File Sharing Bot](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/File-Sharing-Bot) | [Darshan Patel](https://github.com/DarshanPatel11)|
|
|
||||||
|[Flash card quizzer](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Flash-card-Challenge) |[Utkarsh Sharma](https://github.com/Utkarsh1308) |
|
|
||||||
|[Frammed text generator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/FramedText) | [jcdwalle](https://github.com/jcdwalle)|
|
|
||||||
|[git_automation](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/git_automation)| [loge1998](https://github.com/loge1998)|
|
|
||||||
|[Gmail Mailing Script](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/mailing) |[mayank-kapur](https://github.com/kapurm17) |
|
|
||||||
|[Get Time By TimeZone](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Get_Time_TimezoneWise)|[Parth Shah](https://github.com/codingis4noobs) |
|
|
||||||
|[Handwrting DNN recognizer](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Handwriting_Recognizer) |[Chris]() |
|
|
||||||
|[HTML Table to List](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/HTML_Table_to_List) | [Nitish Srivastava](https://github.com/nitish-iiitd)|
|
|
||||||
|[Image circle formatter](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Image-Circulator) |[Berk Gureken](https://github.com/bureken) |
|
|
||||||
|[Image To PDF](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/images2pdf)|[msaoudallah](https://github.com/msaoudallah)|
|
|
||||||
|[Instadp Web Scrapper](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/InstadpShower)|[Psychiquest](https://github.com/psychiquest)|
|
|
||||||
|[IP Address ](https://github.com/hashtagAB/Awesome-Python-Scripts/tree/master/ipaddress)|[Xenium](https://github.com/xeniumcode)|
|
|
||||||
|[Keylogger](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Keylogger) |[Preet Mishra](https://github.com/preetmishra) |
|
|
||||||
|[Minecraft Server in background](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Minecraft_server_in_background)|[Max von Forell](https://github.com/mvforell)|
|
|
||||||
|[Own IP locator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Location_Of_Own_IP_Adress)|[Chris]()|
|
|
||||||
|[Port Scanner](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Port_Scanner)|[Plutoberth](https://github.com/Plutoberth)|
|
|
||||||
|[Harry Potter Cloak](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Harry-Potter-Cloak) | [thesmartdeveloperr](https://github.com/thesmartdeveloperr)|
|
|
||||||
|[Python Algebra Solver](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Algebra-Solver)|[Sengxay Xayachack](https://github.com/frankxayachack)|
|
|
||||||
|[Random name generator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Random_Names_Generator)| [Ayush Bhardwaj](https://github.com/hastagAB)|
|
|
||||||
|[Random Password Generators](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Random_Password_Generator)| [Hafpaf](https://github.com/hafpaf) and [Renderer-RCT2](https://github.com/Renderer-RCT2)|
|
|
||||||
|[Server Ping](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Ping_Server)|[prince]()|
|
|
||||||
|[Signature photo to PNG converter](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/signature2png)|[Rodolfo Ferro](https://github.com/RodolfoFerro)|
|
|
||||||
|[Simple Webpage Parser](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/SimpleWebpageParser)|[Nitish Srivastava](https://github.com/nitish-iiitd)|
|
|
||||||
|[Slideshare downloader](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Slideshare-Downloader)|[Chris Goes](https://github.com/GhostofGoes)|
|
|
||||||
|[SMS your location](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/SmsYourLocation)|[prince]()|
|
|
||||||
|[Squid installer for Ubuntu](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Squid-Proxy-Installer-for-Ubuntu16)|[Berkay Demir]()|
|
|
||||||
|[Subtitle downloader](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Subtitle-downloader)|[Kaushlendra Pratap](https://github.com/kaushl1998)|
|
|
||||||
|[TTS - Text to Speech Mp3](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/TTS_Text_to_Speech_Mp3)|[Antonio Andrade](https://github.com/xAndrade)|
|
|
||||||
|[Top_News](Top_News)|[Attupatil](https://github.com/Attupatil)|
|
|
||||||
|[Take Screenshot](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Take_screenshot)|[Moad Mohammed Elhebri](https://github.com/moadmmh)|
|
|
||||||
|[To Do Bot](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/To-Do-Bot) | [Darshan Patel](https://github.com/DarshanPatel11)|
|
|
||||||
|[Upload Files to S3](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Upload_files_to_s3)|[Jayram Nai](https://github.com/jramnai)|
|
|
||||||
|[Vinegère Cipher](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/vigenere_cipher)|[victoni](https://github.com/victoni)|
|
|
||||||
|[Web proxy](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Proxy-Request)|[Nikhil Kumar Singh](https://github.com/nikhilkumarsingh)|
|
|
||||||
|[Website blocker](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Website-Blocker)|[Ayush Bhardwaj](https://github.com/hastagAB)|
|
|
||||||
|[Word generator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Word-generator)|[TGLIDE](https://github.com/TGlide)|
|
|
||||||
|[Work log generator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Work_Log_Generator)|[Maël Pedretti](https://github.com/73VW)|
|
|
||||||
|[Youtube video downloader](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Youtube_Video_Downloader)|[Christopher He](https://github.com/hecris)|
|
|
||||||
|[Zabbix API](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/zabbix_api)|[msg4sunny](https://github.com/msg4sunny)|
|
|
||||||
|[Zip password cracker](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/zip_password_cracker)|[umar abdullahi](https://github.com/umarbrowser)|
|
|
||||||
|[RSA Algorithm](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/RSA_Algorithm)|[Chinmay Rane](https://github.com/Chinmayrane16)|
|
|
||||||
|[CLI Calculator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/cli_calculator)|[Willian GL](https://github.com/williangl) |
|
|
||||||
|[Find PhoneNumber in String](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Find-PhoneNumber-in-String)|[Austin Zuniga](https://github.com/AustinZuniga)|
|
|
||||||
|[IMDB TV Series Info Extractor](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/imdb_episode_ratings)|[Yash Raj Sarrof](https://github.com/yashYRS) |
|
|
||||||
|[PX to REM](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/PX-to-REM)|[Atthaphon Urairat](https://github.com/uatthaphon) |
|
|
||||||
|[py_based_music_player](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/py_based_music_player) | [Bhargav Kuvadiya](https://github.com/techdobz) |
|
|
||||||
|[Yoda-speak Translator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/speak_like_yoda)|[sonniki](https://github.com/sonniki) |
|
|
||||||
|[SSH Host adder](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/SSH_Host_Adder)|[NinoDoko](https://github.com/NinoDoko)|
|
|
||||||
|[Wikipedia-Search](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Wikipedia-Search)|[Nissaar](https://github.com/Nissaar) |
|
|
||||||
|[Instagram Video Downloader](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/insta_video_downloader)|[Shobhit Bhosure](https://github.com/shobhit99) |
|
|
||||||
|[Medium Article Downloader](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/medium_article_downloader)|[coolsonu39](https://github.com/coolsonu39)|
|
|
||||||
|[Face Recognition](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/image_recognition)|[LOKESH KHURANA](https://github.com/theluvvkhurana)|
|
|
||||||
|[File Encrypt Decrypt](file-encrypt-decrypt)|[Aditya Arakeri](https://github.com/adityaarakeri)|
|
|
||||||
| [Address locator](Location_Of_Adress) | [Chris]() |
|
|
||||||
| [Automated calendar](automated_calendar) | [J.A. Hernández](https://github.com/jesusalberto18) |
|
|
||||||
| [Automated emails](automated_email) | [Suvigya](https://github.com/SuvigyaJain1) |
|
|
||||||
|[AI chatbot](Artificial-intelligence_bot) |[umar abdullahi](https://github.com/umarbrowser) |
|
|
||||||
|[Asymmetric Encryption](asymmetric_cryptography) |[victor matheus](https://github.com/victormatheusc) |
|
|
||||||
|[Bitcoin price GUI](Bitcoin-Price-GUI) |[Amirul Abu](https://github.com/amirulabu) |
|
|
||||||
|[Cryptocurrency Converter](Cryptocurrency-converter) |[AdnCodz](https://github.com/AdnCodez) |
|
|
||||||
|[Caesar Cipher](caesar_cipher) |[epi052](https://github.com/epi052) |
|
|
||||||
|[Checksum tool](Checksum) |[Austin Ewens](https://github.com/aewens) |
|
|
||||||
|[Codechef autosubmitter](Codechef-Code-Submitter) |[Harshit Mahajan](https://github.com/hmahajan99) |
|
|
||||||
|[Colored B&W Image Converter](Color_to_BW_Converter) |[Nitish Srivastava](https://github.com/nitish-iiitd) |
|
|
||||||
|[Contact 'Leads' Distribution](Contact-Distribution) |[Tiago Cordeiro](https://github.com/tiagocordeiro) |
|
|
||||||
|[Cricket Matches web Scraper](CricBuzz_Score_Update) |[Divy Ranjan](https://github.com/divyranjan17) |
|
|[Cricket Matches web Scraper](CricBuzz_Score_Update) |[Divy Ranjan](https://github.com/divyranjan17) |
|
||||||
| [Crypt socket](Crypt_Socket)|[Willian GL](https://github.com/williangl) |
|
|[Crypt socket](Crypt_Socket)|[Willian GL](https://github.com/williangl) |
|
||||||
|[Current City Weather](Current_City_Weather) |[Jesse Bridge](https://github.com/jessebridge) |
|
|[Cryptocurrency Converter](Cryptocurrency-converter) |[AdnCodz](https://github.com/AdnCodez) |
|
||||||
|[Directory organizer](Directory-organizer) | [Athul P](https://github.com/athulpn) |
|
|[Cryptocurrency Prices](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Cryptocurrency-Prices) |[xemeds](https://github.com/xemeds) |
|
||||||
|[DOH DIG](DOH-Dig/) | [Ryan](https://github.com/awsumco) |
|
|[Current City Weather](Current_City_Weather) |[Jesse Bridge](https://github.com/jessebridge) |
|
||||||
|[Excel Files Merger](Excel_Files_Merger) | [Andrei N](https://github.com/Andrei-Niculae)|
|
|[DOH DIG](DOH-Dig/) | [Ryan](https://github.com/awsumco) |
|
||||||
|[Excel to List](Excel_to_ListofList) | [Nitish Srivastava](https://github.com/nitish-iiitd)|
|
|[Database-As-Storage](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Database-As-Storage) | [Bhargav Kuvadiya](https://github.com/techdobz) |
|
||||||
|
|[Directory Tree Visualizer](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Directory_Tree_Generator) | [Harpreet Singh Saluja](https://github.com/hssaluja25/) |
|
||||||
|
|[Directory organizer](Directory-organizer) | [Athul P](https://github.com/athulpn) |
|
||||||
|
|[Download Page as PDF](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Download-page-as-pdf)|[Jeremias Gomes](https://github.com/j3r3mias)|
|
||||||
|
|[Elasticsearch snapshot](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/elastic-snapshot) | [Joe Ryan](https://github.com/joeryan) |
|
||||||
|
|[English Theasaurus](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/English_Theasauras/) | [Ansh Dhingra](https://github.com/anshdhinhgra47) |
|
||||||
|
|[Excel Files Merger](Excel_Files_Merger) | [Andrei N](https://github.com/Andrei-Niculae)|
|
||||||
|
|[Excel to List](Excel_to_ListofList) | [Nitish Srivastava](https://github.com/nitish-iiitd)|
|
||||||
|[Extended_ip_address_info](extended_ip_address_info) | [hafpaf](https://github.com/hafpaf)|
|
|[Extended_ip_address_info](extended_ip_address_info) | [hafpaf](https://github.com/hafpaf)|
|
||||||
|[Fibonacci_Sequence_Generator](Fibonacci_Sequence_Generator) | [John Wesley Kommala](https://github.com/JohnWesleyK)|
|
|[Face Recognition](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Face_recognition)|[LOKESH KHURANA](https://github.com/theluvvkhurana)|
|
||||||
|[File explorer](File-Explorer-Dialog-Box) | [Nikhil Kumar Singh](https://github.com/nikhilkumarsingh)|
|
|[Fibonacci_Sequence_Generator](Fibonacci_Sequence_Generator) | [John Wesley Kommala](https://github.com/JohnWesleyK)|
|
||||||
|[File Sharing Bot](File-Sharing-Bot) | [Darshan Patel](https://github.com/DarshanPatel11)|
|
|[File Carving](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/File_Carving) | [Yeryeong Kim](https://github.com/icarusicarus/) |
|
||||||
|
|[File Encrypt Decrypt](file-encrypt-decrypt)|[Aditya Arakeri](https://github.com/adityaarakeri)|
|
||||||
|
|[FileMagic Organizer](./FileMagic_Organizer)|[malivinayak](https://github.com/malivinayak)|
|
||||||
|
|[File Organizer](File-Organizer)|[Ayush Bhardwaj](https://github.com/hastagAB)|
|
||||||
|
|[File Sharing Bot](File-Sharing-Bot) | [Darshan Patel](https://github.com/DarshanPatel11)|
|
||||||
|
|[File explorer](File-Explorer-Dialog-Box) | [Nikhil Kumar Singh](https://github.com/nikhilkumarsingh)|
|
||||||
|
|[Find PhoneNumber in String](Find-PhoneNumber-in-String)|[Austin Zuniga](https://github.com/AustinZuniga)|
|
||||||
|[Flash card quizzer](Flash-card-Challenge) |[Utkarsh Sharma](https://github.com/Utkarsh1308) |
|
|[Flash card quizzer](Flash-card-Challenge) |[Utkarsh Sharma](https://github.com/Utkarsh1308) |
|
||||||
|[Frammed text generator](FramedText) | [jcdwalle](https://github.com/jcdwalle)|
|
|[Folder Locker and hider](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Folder%20Locker%20%26%20Hider)|[Prajjwal Pathak](https://github.com/pyguru123)|
|
||||||
|[Gmail Mailing Script](mailing) |[mayank-kapur](https://github.com/kapurm17) |
|
|[Folder Manager](Folder_Manager)|[Harsh Raj](https://github.com/DeadProgrammer0)|
|
||||||
|[Handwrting DNN recognizer](Handwriting_Recognizer) |[Chris]() |
|
|[Frammed text generator](FramedText) | [jcdwalle](https://github.com/jcdwalle)|
|
||||||
|[HTML Table to List](HTML_Table_to_List) | [Nitish Srivastava](https://github.com/nitish-iiitd)|
|
|[Get Time By TimeZone](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Get_Time_TimezoneWise)|[Parth Shah](https://github.com/codingis4noobs) |
|
||||||
|[Image circle formatter](Image-Circulator) |[Berk Gureken](https://github.com/bureken) |
|
|[git_automation](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/git_automation)| [loge1998](https://github.com/loge1998)|
|
||||||
|[Image To PDF](images2pdf)|[msaoudallah](https://github.com/msaoudallah)|
|
|
||||||
|[Instadp Web Scrapper](InstadpShower)|[Psychiquest](https://github.com/psychiquest)|
|
|
||||||
|[Keylogger](Keylogger) |[Preet Mishra](https://github.com/preetmishra) |
|
|
||||||
|[Minecraft Server in background](Minecraft_server_in_background)|[Max von Forell](https://github.com/mvforell)|
|
|
||||||
|[Own IP locator](Location_Of_Own_IP_Adress)|[Chris]()|
|
|
||||||
|[Port Scanner](Port_Scanner)|[Plutoberth](https://github.com/Plutoberth)|
|
|
||||||
|[Python Algebra Solver](Algebra-Solver)|[Sengxay Xayachack](https://github.com/frankxayachack)|
|
|
||||||
|[Random name generator](Random_Names_Generator)| [Ayush Bhardwaj](https://github.com/hastagAB)|
|
|
||||||
|[Random Password Generators](Random_Password_Generator)| [Hafpaf](https://github.com/hafpaf) and [Renderer-RCT2](https://github.com/Renderer-RCT2)|
|
|
||||||
|[Server Ping](Ping_Server)|[prince]()|
|
|
||||||
|[Signature photo to PNG converter](signature2png)|[Rodolfo Ferro](https://github.com/RodolfoFerro)|
|
|
||||||
|[Simple Webpage Parser](SimpleWebpageParser)|[Nitish Srivastava](https://github.com/nitish-iiitd)|
|
|
||||||
|[Slideshare downloader](Slideshare-Downloader)|[Chris Goes](https://github.com/GhostofGoes)|
|
|
||||||
|[SMS your location](SmsYourLocation)|[prince]()|
|
|
||||||
|[Squid installer for Ubuntu](Squid-Proxy-Installer-for-Ubuntu16)|[Berkay Demir]()|
|
|
||||||
|[Subtitle downloader](Subtitle-downloader)|[Kaushlendra Pratap](https://github.com/kaushl1998)|
|
|
||||||
|[Take Screenshot](Take_screenshot)|[Moad Mohammed Elhebri](https://github.com/moadmmh)|
|
|
||||||
|[To Do Bot](To%20Do%20Bot) | [Darshan Patel](https://github.com/DarshanPatel11)|
|
|
||||||
|[Upload Files to S3](Upload_files_to_s3)|[Jayram Nai](https://github.com/jramnai)|
|
|
||||||
|[Vinegère Cipher](vigenere_cipher)|[victoni](https://github.com/victoni)|
|
|
||||||
|[Web proxy](Proxy-Request)|[Nikhil Kumar Singh](https://github.com/nikhilkumarsingh)|
|
|
||||||
|[Website blocker](Website-Blocker)|[Ayush Bhardwaj](https://github.com/hastagAB)|
|
|
||||||
|[Website Url Detector](Website_Url_Detector)|[sonniki](https://github.com/sonniki)|
|
|
||||||
|[Word Frequency Counter](Word_Frequency_Counter)|[sonniki](https://github.com/sonniki)|
|
|
||||||
|[Word generator](Word-generator)|[TGLIDE](https://github.com/TGlide)|
|
|
||||||
|[Work log generator](Work_Log_Generator)|[Maël Pedretti](https://github.com/73VW)|
|
|
||||||
|[Youtube video downloader](Youtube_Video_Downloader)|[Christopher He](https://github.com/hecris)|
|
|
||||||
|[Zabbix API](zabbix_api)|[msg4sunny](https://github.com/msg4sunny)|
|
|
||||||
|[Zip password cracker](zip_password_cracker)|[umar abdullahi](https://github.com/umarbrowser)|
|
|
||||||
|[CLI Calculator](cli_calculator)|[Willian GL](https://github.com/williangl) |
|
|
||||||
|[Find PhoneNumber in String](Find-PhoneNumber-in-String)|[Austin Zuniga](https://github.com/AustinZuniga)|
|
|
||||||
|[IMDB TV Series Info Extractor](imdb_episode_ratings)|[Yash Raj Sarrof](https://github.com/yashYRS) |
|
|
||||||
|[Yoda-speak Translator](speak_like_yoda)|[sonniki](https://github.com/sonniki) |
|
|
||||||
|[Medium Article Downloader](medium_article_downloader)|[coolsonu39](https://github.com/coolsonu39)|
|
|
||||||
|[RSA Key Pair Generator](RSA-key-pairs) | [Aditya Parikh](https://github.com/obiwan69) |
|
|
||||||
|[Clean_up_photo](Clean_up_photo_directory)|[sritanmay001](https://github.com/sritanmy001)|
|
|
||||||
|[PyRecorder](PyRecorder)|[Rocky Jain](https://github.com/jainrocky)|
|
|
||||||
|[Pretty CSV](Pretty-CSV)|[Frizz925](https://github.com/Frizz925)|
|
|
||||||
|[File Organizer](File-Organizer)|[Ayush Bhardwaj](https://github.com/hastagAB)|
|
|
||||||
|[send_whatsapp_message](send_whatsapp_message)|[Mukesh Prasad](https://github.com/mukeshprasad)|
|
|
||||||
|[YTS Torrents](yts_torrents)|[Mayank Nader](https://github.com/makkoncept)|
|
|
||||||
|[COVID visualiser (real-time) ](covdi_visualiser)|[Tushar Gupta](https://github.com/tushar5526)|
|
|
||||||
|[Random_Email_Generator](Random_Email_Generator)|[Shubham Garg](https://github.com/shub-garg)|
|
|
||||||
|[WiFi Password Viewer](Wifi-Password)|[Sagar Patel](https://github.com/sagar627)|
|
|
||||||
|[Tambola_Ticket_Generator](Tambola_Ticket_Generator)|[Amandeep_Singh](https://github.com/Synster)|
|
|
||||||
| [Py_Cleaner](Py_Cleaner) | [Abhishek Dobliyal](https://github.com/Abhishek-Dobliyal)|
|
|
||||||
|[Send messages to sqs in parallel](send_sqs_messages_in_parallel)|[Jinam Shah](https://github.com/jinamshah)|
|
|
||||||
|[Codeforces Checker](codeforcesChecker)|[Jinesh Parakh](https://github.com/jineshparakh)|
|
|
||||||
|[Github repo creator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Git_repo_creator)|[Harish Tiwari ](https://github.com/optimist2309)|
|
|[Github repo creator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Git_repo_creator)|[Harish Tiwari ](https://github.com/optimist2309)|
|
||||||
|[Remove-Duplicate-Files](Remove-Duplicate-Files)|[Aayushi Varma](https://github.com/aayuv17)|
|
|[Github Review Bot](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Github-Review-Bot)|[Gaurav Giri](https://github.com/gaurovgiri)|
|
||||||
|[PDF2text](PDF2text)|[QuangPH](https://github.com/quangph-1686a)|
|
|[GithubBot](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Github_Bot)|[Abhilasha](https://github.com/Abhilasha06)|
|
||||||
|[Image Watermarker (batch)](imageWatermarker)|[Remco Halman](https://github.com/remcohalman)|
|
|[Gmail Mailing Script](mailing) |[mayank-kapur](https://github.com/kapurm17) |
|
||||||
|[Folder Manager](Folder_Manager)|[Harsh Raj](https://github.com/DeadProgrammer0)|
|
|[Google Meet Joiner](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/google_meet_joiner)|[JohanSanSebastian](https://github.com/JohanSanSebastian)|
|
||||||
|[IMDBQuerier](IMDBQuerier)|[Burak Bekci](https://github.com/Bekci)|
|
|[HTML Table to List](HTML_Table_to_List) | [Nitish Srivastava](https://github.com/nitish-iiitd)|
|
||||||
|[URL shortener](url_shortener)|[Sam Ebison](https://github.com/ebsa491)|
|
|[Handwrting DNN recognizer](Handwriting_Recognizer) |[Chris]() |
|
||||||
|[2048](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/2048)|[Krunal](https://github.com/gitkp11)|
|
|[Harry Potter Cloak](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Harry-Potter-Cloak) | [thesmartdeveloperr](https://github.com/thesmartdeveloperr)|
|
||||||
|[Spotify Downloader](spotify_downloader)|[Sagar Patel](https://github.com/sagar627)|
|
|[IMDB TV Series Info Extractor](imdb_episode_ratings)|[Yash Raj Sarrof](https://github.com/yashYRS) |
|
||||||
|[Download Page as PDF](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Download-page-as-pdf)|[Jeremias Gomes](https://github.com/j3r3mias)|
|
|[IMDBQuerier](IMDBQuerier)|[Burak Bekci](https://github.com/Bekci)|
|
||||||
|[JSON file to YAML convertor](https://github.com/saksham117/Awesome-Python-Scripts/tree/master/json-to-yaml)|[Saksham Basandrai](https://github.com/saksham117)|
|
|[IP Address ](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/ipaddress)|[Xenium](https://github.com/xeniumcode)|
|
||||||
|[Independent RSA Communication Algorithm](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/RSA_Communication)|[Miguel Santos](https://github.com/wi6n3l)|
|
|[Image Compressor](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Image_Compressor)|[Prathima Kadari](https://github.com/prathimacode-hub)|
|
||||||
|[GithubBot](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/GithubBot)|[Abhilasha](https://github.com/Abhilasha06)|
|
|[Image To PDF](images2pdf)|[msaoudallah](https://github.com/msaoudallah)|
|
||||||
|[Translate CLI](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/TranslateCLI)|[Rodrigo Oliveira](https://github.com/rodrigocam)|
|
|[Image Watermarker (batch)](imageWatermarker)|[Remco Halman](https://github.com/remcohalman)|
|
||||||
|[Rock-Paper-Scissor Game](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Rock-Paper-Scissor)|[Punit Sakre](https://github.com/punitsakre23)|
|
|[Image circle formatter](Image-Circulator) |[Berk Gureken](https://github.com/bureken) |
|
||||||
|[Folder Locker and hider](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Folder%20Locker%20%26%20Hider)|[Prajjwal Pathak](https://github.com/pyguru123)|
|
|[Independent RSA Communication Algorithm](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/RSA_Communication)|[Miguel Santos](https://github.com/wi6n3l)|
|
||||||
|[Image Compressor](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Image_Compressor)|[Prathima Kadari](https://github.com/prathimacode-hub)|
|
|[Instadp Web Scrapper](InstadpShower)|[Psychiquest](https://github.com/psychiquest)|
|
||||||
|[Test Your Internet Speed](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/TestMyInternetSpeed)|[TheSmartDeveloperr](https://github.com/thesmartdeveloperr)|
|
|[Instagram Video Downloader](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/insta_video_downloader)|[Shobhit Bhosure](https://github.com/shobhit99) |
|
||||||
|[Plagiarism_detector](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Plagiarism_detector)|[Akshita Singhal](https://github.com/akshitasinghal4444)|
|
|[JSON file to YAML convertor](https://github.com/saksham117/Awesome-Python-Scripts/tree/master/json-to-yaml)|[Saksham Basandrai](https://github.com/saksham117)|
|
||||||
|[csv_to_json](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/csv_to_json)|[MoiZ](https://github.com/TechBoyy6)|
|
|[Keylogger](Keylogger) |[Preet Mishra](https://github.com/preetmishra) |
|
||||||
|[Battery_notification](https://github.com/hastagABAwesome-Python-Scripts/Battery_notification/)|[Krishna Sharma](https://github.com/krishnasharma1386)|
|
|[Medium Article Downloader](medium_article_downloader)|[coolsonu39](https://github.com/coolsonu39)|
|
||||||
|[Steg_Tool](https://github.com/hastagABAwesome-Python-Scripts/Steg_Tool/)|[Shankar JP](https://github.com/shankarjp)|
|
|[Minecraft Server in background](Minecraft_server_in_background)|[Max von Forell](https://github.com/mvforell)|
|
||||||
| [Directory Tree Visualizer](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Directory_Tree_Generator) | [Harpreet Singh Saluja](https://github.com/hssaluja25/) |
|
|[Own IP locator](Location_Of_Own_IP_Adress)|[Chris]()|
|
||||||
|[Pressure_Converter](https://github.com/E-wave112/Awesome-Python-Scripts/tree/master/Pressure_Converter)|[E-Wave](https://github.com/E-wave112)|
|
|[PDF2text](PDF2text)|[QuangPH](https://github.com/quangph-1686a)|
|
||||||
| [File Carving](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/File_Carving) | [Yeryeong Kim](https://github.com/icarusicarus/) |
|
|[PDFsplitter](PDFsplitter)|[Prathamesh-Ghatole](https://github.com/Prathamesh-Ghatole)|
|
||||||
|[Google Meet Joiner](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/google_meet_joiner)|[JohanSanSebastian](https://github.com/JohanSanSebastian)|
|
|[PX to REM](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/PX-to-REM)|[Atthaphon Urairat](https://github.com/uatthaphon) |
|
||||||
|[Pdf to AudioBook Converter](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/PdfToAudio)|[Ayesha Gull](https://github.com/ayeshag7/)|
|
|[Pdf to AudioBook Converter](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/PdfToAudio)|[Ayesha Gull](https://github.com/ayeshag7/)|
|
||||||
|[Countdown](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Countdown)|[Jeremias Gomes](https://github.com/j3r3mias)|
|
|[Plagiarism_detector](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Plagiarism_detector)|[Akshita Singhal](https://github.com/akshitasinghal4444)|
|
||||||
|
|[Port Scanner](Port_Scanner)|[Plutoberth](https://github.com/Plutoberth)|
|
||||||
|
|[Pressure_Converter](https://github.com/E-wave112/Awesome-Python-Scripts/tree/master/Pressure_Converter)|[E-Wave](https://github.com/E-wave112)|
|
||||||
|
|[Pretty CSV](Pretty-CSV)|[Frizz925](https://github.com/Frizz925)|
|
||||||
|
|[PyRecorder](PyRecorder)|[Rocky Jain](https://github.com/jainrocky)|
|
||||||
|
|[py_based_music_player](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/py_based_music_player) | [Bhargav Kuvadiya](https://github.com/techdobz) |
|
||||||
|
|[Py_Cleaner](Py_Cleaner) | [Abhishek Dobliyal](https://github.com/Abhishek-Dobliyal)|
|
||||||
|
|[Python Algebra Solver](Algebra-Solver)|[Sengxay Xayachack](https://github.com/frankxayachack)|
|
||||||
|
|[RSA Algorithm](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/RSA_Algorithm)|[Chinmay Rane](https://github.com/Chinmayrane16)|
|
||||||
|
|[RSA Key Pair Generator](RSA-key-pairs) | [Aditya Parikh](https://github.com/obiwan69) |
|
||||||
|
|[Random Password Generators](Random_Password_Generator)| [Hafpaf](https://github.com/hafpaf) and [Renderer-RCT2](https://github.com/Renderer-RCT2)|
|
||||||
|
|[Random name generator](Random_Names_Generator)| [Ayush Bhardwaj](https://github.com/hastagAB)|
|
||||||
|
|[Random_Email_Generator](Random_Email_Generator)|[Shubham Garg](https://github.com/shub-garg)|
|
||||||
|
|[Remove-Duplicate-Files](Remove-Duplicate-Files)|[Aayushi Varma](https://github.com/aayuv17)|
|
||||||
|
|[Rock-Paper-Scissor Game](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Rock-Paper-Scissor)|[Punit Sakre](https://github.com/punitsakre23)|
|
||||||
|
|[send_whatsapp_message](send_whatsapp_message)|[Mukesh Prasad](https://github.com/mukeshprasad)|
|
||||||
|
|[Send messages to sqs in parallel](send_sqs_messages_in_parallel)|[Jinam Shah](https://github.com/jinamshah)|
|
||||||
|
|[Server Ping](Ping_Server)|[prince]()|
|
||||||
|
|[Signature photo to PNG converter](signature2png)|[Rodolfo Ferro](https://github.com/RodolfoFerro)|
|
||||||
|
|[Simple Webpage Parser](SimpleWebpageParser)|[Nitish Srivastava](https://github.com/nitish-iiitd)|
|
||||||
|
|[Slideshare downloader](Slideshare-Downloader)|[Chris Goes](https://github.com/GhostofGoes)|
|
||||||
|
|[SMS your location](SmsYourLocation)|[prince]()|
|
||||||
|
|[Spotify Downloader](spotify_downloader)|[Sagar Patel](https://github.com/sagar627)|
|
||||||
|
|[Squid installer for Ubuntu](Squid-Proxy-Installer-for-Ubuntu16)|[Berkay Demir]()| |
|
||||||
|
|[SSH Host adder](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/SSH_Host_Adder)|[NinoDoko](https://github.com/NinoDoko)|
|
||||||
|
|[Steg_Tool](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Steg_Tool/)|[Shankar JP](https://github.com/shankarjp)|
|
||||||
|
|[sudoku-solver](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/sudoku-solver) | [Rishabh Umrao](https://github.com/ayedaemon) |
|
||||||
|
|[Subtitle downloader](Subtitle-downloader)|[Kaushlendra Pratap](https://github.com/kaushl1998)|
|
||||||
|
|[TTS - Text to Speech Mp3](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/TTS_Text_to_Speech_Mp3)|[Antonio Andrade](https://github.com/xAndrade)|
|
||||||
|
|[Take Screenshot](Take_screenshot)|[Moad Mohammed Elhebri](https://github.com/moadmmh)|
|
||||||
|
|[Tambola_Ticket_Generator](Tambola_Ticket_Generator)|[Amandeep_Singh](https://github.com/Synster)|
|
||||||
|
|[Test Your Internet Speed](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/TestMyInternetSpeed)|[TheSmartDeveloperr](https://github.com/thesmartdeveloperr)|
|
||||||
|
|[TicTacToe AI and 2 players](https://github.com/ShadowHunter15/Awesome-Python-Scripts/tree/master/TicTacToe_AI_and_2_players) | [Omar Sameh](https://github.com/ShadowHunter15) |
|
||||||
|
|[To Do Bot](To%20Do%20Bot) | [Darshan Patel](https://github.com/DarshanPatel11)|
|
||||||
|
|[Top_News](Top_News)|[Attupatil](https://github.com/Attupatil)|
|
||||||
|
|[Translate CLI](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/TranslateCLI)|[Rodrigo Oliveira](https://github.com/rodrigocam)|
|
||||||
|
|[URL shortener](url_shortener)|[Sam Ebison](https://github.com/ebsa491)|
|
||||||
|
|[Upload Files to S3](Upload_files_to_s3)|[Jayram Nai](https://github.com/jramnai)|
|
||||||
|
|[Vinegère Cipher](vigenere_cipher)|[victoni](https://github.com/victoni)|
|
||||||
|
|[Web proxy](Proxy-Request)|[Nikhil Kumar Singh](https://github.com/nikhilkumarsingh)|
|
||||||
|
|[Website Url Detector](Website_Url_Detector)|[sonniki](https://github.com/sonniki)|
|
||||||
|
|[Website blocker](Website-Blocker)|[Ayush Bhardwaj](https://github.com/hastagAB)|
|
||||||
|
|[WiFi Password Viewer](Wifi-Password)|[Sagar Patel](https://github.com/sagar627)|
|
||||||
|
|[Wikipedia-Search](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Wikipedia-Search)|[Nissaar](https://github.com/Nissaar) |
|
||||||
|
|[Word Frequency Counter](Word_Frequency_Counter)|[sonniki](https://github.com/sonniki)|
|
||||||
|
|[Word generator](Word-generator)|[TGLIDE](https://github.com/TGlide)|
|
||||||
|
|[Work log generator](Work_Log_Generator)|[Maël Pedretti](https://github.com/73VW)|
|
||||||
|
|[X Scrapper](X_Scrapper)|[Shreeram](https://github.com/iamshreeram)|
|
||||||
|
|[YTS Torrents](yts_torrents)|[Mayank Nader](https://github.com/makkoncept)|
|
||||||
|
|[Yoda-speak Translator](speak_like_yoda)|[sonniki](https://github.com/sonniki) |
|
||||||
|
|[Youtube video downloader](Youtube_Video_Downloader)|[Christopher He](https://github.com/hecris)|
|
||||||
|
|[Zabbix API](zabbix_api)|[msg4sunny](https://github.com/msg4sunny)|
|
||||||
|
|[Zip password cracker](zip_password_cracker)|[umar abdullahi](https://github.com/umarbrowser)|
|
||||||
|
|[Task Scheduler](Task-Scheduler)|[heysagnik](https://github.com/heysagnik)|
|
||||||
|
|[PDF Password Decypter](PDF_Password_Decrypter)|[parthasdey2304](https://github.com/parthasdey2304)|
|
||||||
|
|
||||||
## How to use:
|
## How to use:
|
||||||
- Clone/Download the directory and navigate to each folder. Or...
|
- Clone/Download the directory and navigate to each folder. Or...
|
||||||
|
@ -249,15 +199,15 @@ Remember to star the repo if you love the scripts~ :wink:
|
||||||
- Only One Commit per PR is Adviced.
|
- Only One Commit per PR is Adviced.
|
||||||
|
|
||||||
# If you like the project:
|
# If you like the project:
|
||||||
- Star this Repo - [Awesome Python Scripts](https://github.com/hastagAB/Awesome-Python-Scripts)
|
- **Star this Repo - [Awesome Python Scripts](https://github.com/hastagAB/Awesome-Python-Scripts)**
|
||||||
|
|
||||||
- Follow me on GitHub - [Ayush Bhardwaj](https://github.com/hastagAB)
|
- **Follow me on GitHub - [Ayush Bhardwaj](https://github.com/hastagAB)**
|
||||||
|
|
||||||
# Want to connect with me?
|
## Want to Connect with Me?
|
||||||
- [LinkedIn](https://www.linkedin.com/in/hastagab/)
|
[<img src="https://content.linkedin.com/content/dam/me/business/en-us/amp/brand-site/v2/bg/LI-Bug.svg.original.svg" height="30px" alt="Linkedin">](https://www.linkedin.com/in/hastagab/)
|
||||||
- [Twitter](https://twitter.com/HastagAB)
|
[<img src="https://static.dezeen.com/uploads/2023/07/x-logo-twitter-elon-musk_dezeen_2364_col_0.jpg" height="30px" alt="X/Twitter">](https://twitter.com/HastagAB)
|
||||||
- [Facebook](https://www.facebook.com/SirHastagAB)
|
[<img src="https://w7.pngwing.com/pngs/561/460/png-transparent-fb-facebook-facebook-logo-social-media-icon-thumbnail.png" height="30px" alt="Facebook">](https://www.facebook.com/SirHastagAB)
|
||||||
- [Instagram](https://www.instagram.com/sirhastagab/)
|
[<img src="https://static.cdninstagram.com/rsrc.php/v3/yI/r/VsNE-OHk_8a.png" height="31px" alt="Instagram">](https://www.instagram.com/sirhastagab/)
|
||||||
|
|
||||||
|
|
||||||
[![](https://img.shields.io/badge/Made%20With%20❤️%20By-HastagAB-red)](https://github.com/hastagAB)
|
[![](https://img.shields.io/badge/Made%20With%20❤️%20By-HastagAB-red)](https://github.com/hastagAB)
|
||||||
|
|
85
Task-Scheduler/Readme.md
Normal file
85
Task-Scheduler/Readme.md
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
# Task Scheduler
|
||||||
|
|
||||||
|
This Python script, `task_scheduler.py`, is a simple command-line task management application that allows users to add, view, and delete tasks with due dates. The application stores task data in a JSON file.
|
||||||
|
|
||||||
|
## How to Use
|
||||||
|
|
||||||
|
1. **Installation**:
|
||||||
|
|
||||||
|
- Make sure you have Python installed on your system.
|
||||||
|
|
||||||
|
2. **Run the Application**:
|
||||||
|
|
||||||
|
- Open a terminal or command prompt.
|
||||||
|
- Navigate to the directory where `task_scheduler.py` is located.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cd /path/to/directory
|
||||||
|
```
|
||||||
|
|
||||||
|
- Run the script:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ python task_scheduler.py
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Menu Options**:
|
||||||
|
|
||||||
|
- The application provides the following menu options:
|
||||||
|
|
||||||
|
- **Add Task**: Allows you to add a new task with a name and due date (in YYYY-MM-DD format).
|
||||||
|
|
||||||
|
- **View Tasks**: Displays a list of tasks with their names and due dates.
|
||||||
|
|
||||||
|
- **Delete Task**: Lets you delete a task by specifying its number in the list.
|
||||||
|
|
||||||
|
- **Quit**: Exits the application.
|
||||||
|
|
||||||
|
4. **Data Storage**:
|
||||||
|
|
||||||
|
- The tasks are stored in a JSON file named `tasks.json` in the same directory as the script.
|
||||||
|
|
||||||
|
5. **Error Handling**:
|
||||||
|
|
||||||
|
- The application handles various errors, such as invalid date format or task numbers.
|
||||||
|
|
||||||
|
## Example Usage
|
||||||
|
|
||||||
|
1. **Add Task**:
|
||||||
|
|
||||||
|
- Choose option 1.
|
||||||
|
- Enter a task name.
|
||||||
|
- Enter the due date in YYYY-MM-DD format.
|
||||||
|
|
||||||
|
2. **View Tasks**:
|
||||||
|
|
||||||
|
- Choose option 2 to see a list of added tasks with their due dates.
|
||||||
|
|
||||||
|
3. **Delete Task**:
|
||||||
|
|
||||||
|
- Choose option 3.
|
||||||
|
- Enter the number of the task you want to delete.
|
||||||
|
|
||||||
|
4. **Quit**:
|
||||||
|
|
||||||
|
- Choose option 4 to exit the application.
|
||||||
|
|
||||||
|
## Data Persistence
|
||||||
|
|
||||||
|
The application loads tasks from the `tasks.json` file when it starts and saves tasks back to the file after any additions or deletions. This ensures that your tasks are retained even when the application is closed and reopened.
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
The application checks for invalid date formats and incorrect task numbers, providing appropriate error messages to guide the user.
|
||||||
|
|
||||||
|
## Important Notes
|
||||||
|
|
||||||
|
- Please ensure that you have Python installed on your system.
|
||||||
|
- Make sure to provide dates in the specified format (YYYY-MM-DD).
|
||||||
|
- Be cautious when deleting tasks, as this action is irreversible.
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
This Python Task Scheduler was created by Sagnik Sahoo.
|
||||||
|
|
||||||
|
Feel free to customize and extend this application to suit your needs. Enjoy managing your tasks!
|
1
Task-Scheduler/requirements.txt
Normal file
1
Task-Scheduler/requirements.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
pytz==2021.3
|
74
Task-Scheduler/scheduler.py
Normal file
74
Task-Scheduler/scheduler.py
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
# Define the data file to store tasks
|
||||||
|
TASKS_FILE = "tasks.json"
|
||||||
|
|
||||||
|
# Load tasks from the data file (if it exists)
|
||||||
|
tasks = []
|
||||||
|
|
||||||
|
if os.path.exists(TASKS_FILE):
|
||||||
|
with open(TASKS_FILE, "r") as file:
|
||||||
|
tasks = json.load(file)
|
||||||
|
|
||||||
|
def save_tasks():
|
||||||
|
# Save tasks to the data file
|
||||||
|
with open(TASKS_FILE, "w") as file:
|
||||||
|
json.dump(tasks, file)
|
||||||
|
|
||||||
|
def add_task():
|
||||||
|
task_name = input("Enter the task name: ")
|
||||||
|
due_date = input("Enter the due date (YYYY-MM-DD): ")
|
||||||
|
|
||||||
|
try:
|
||||||
|
due_date = datetime.datetime.strptime(due_date, "%Y-%m-%d").date()
|
||||||
|
except ValueError:
|
||||||
|
print("Invalid date format. Please use YYYY-MM-DD.")
|
||||||
|
return
|
||||||
|
|
||||||
|
tasks.append({"name": task_name, "due_date": due_date})
|
||||||
|
save_tasks()
|
||||||
|
print(f"Task '{task_name}' added successfully!")
|
||||||
|
|
||||||
|
def view_tasks():
|
||||||
|
print("Tasks:")
|
||||||
|
for idx, task in enumerate(tasks, start=1):
|
||||||
|
print(f"{idx}. {task['name']} (Due: {task['due_date']})")
|
||||||
|
|
||||||
|
def delete_task():
|
||||||
|
view_tasks()
|
||||||
|
task_index = input("Enter the task number to delete: ")
|
||||||
|
|
||||||
|
try:
|
||||||
|
task_index = int(task_index)
|
||||||
|
if 1 <= task_index <= len(tasks):
|
||||||
|
deleted_task = tasks.pop(task_index - 1)
|
||||||
|
save_tasks()
|
||||||
|
print(f"Task '{deleted_task['name']}' deleted successfully!")
|
||||||
|
else:
|
||||||
|
print("Invalid task number.")
|
||||||
|
except ValueError:
|
||||||
|
print("Invalid input. Please enter a valid task number.")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
print("\nTask Scheduler Menu:")
|
||||||
|
print("1. Add Task")
|
||||||
|
print("2. View Tasks")
|
||||||
|
print("3. Delete Task")
|
||||||
|
print("4. Quit")
|
||||||
|
|
||||||
|
choice = input("Enter your choice: ")
|
||||||
|
|
||||||
|
if choice == "1":
|
||||||
|
add_task()
|
||||||
|
elif choice == "2":
|
||||||
|
view_tasks()
|
||||||
|
elif choice == "3":
|
||||||
|
delete_task()
|
||||||
|
elif choice == "4":
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("Invalid choice. Please choose a valid option.")
|
||||||
|
|
||||||
|
print("Goodbye!")
|
|
@ -1,2 +1,2 @@
|
||||||
requests==2.24.0
|
requests==2.31.0
|
||||||
bs4==0.0.1
|
bs4==0.0.1
|
|
@ -1,7 +1,7 @@
|
||||||
requests==2.20.0
|
requests==2.31.0
|
||||||
urllib3==1.26.5
|
urllib3==1.26.18
|
||||||
requests==2.20.0
|
requests==2.31.0
|
||||||
urllib3==1.26.5
|
urllib3==1.26.18
|
||||||
py4j==0.10.4
|
py4j==0.10.4
|
||||||
BeautifulSoup==3.2.0
|
BeautifulSoup==3.2.0
|
||||||
numpy==1.22.0
|
numpy==1.22.0
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
argparse
|
argparse
|
||||||
re
|
re
|
||||||
requests==2.22.0
|
requests==2.31.0
|
22
X_Scrapper/README.md
Normal file
22
X_Scrapper/README.md
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# X Scrapper
|
||||||
|
Use to scrape the tweets from given username (including the metadata of the tweet - location of user, views, likes etc.) using `tweepy`.
|
||||||
|
|
||||||
|
## Use case
|
||||||
|
1. To analyze the (sentiment trend of the given user)[https://github.com/iamshreeram/twitter-senti-analyzer] over the period of time (on given topic or anything)
|
||||||
|
2. Further analysis of user behaviour using geo-location, time of tweets,
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
Python 3.xx
|
||||||
|
tweepy
|
||||||
|
```bash
|
||||||
|
pip install tweepy
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
python main.py <twitter_username>
|
||||||
|
|
||||||
|
|
||||||
|
### Note :
|
||||||
|
1. This requires you to have the consumer key, consumer secret, access key and access secret from your x.com account
|
1
X_Scrapper/requirements.txt
Normal file
1
X_Scrapper/requirements.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
tweepy==4.3.0
|
77
X_Scrapper/x_scraper.py
Normal file
77
X_Scrapper/x_scraper.py
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# encoding: utf-8
|
||||||
|
|
||||||
|
import sys
|
||||||
|
try:
|
||||||
|
import tweepy #https://github.com/tweepy/tweepy
|
||||||
|
except ImportError:
|
||||||
|
print("You'll need tweepy instaled on your system.")
|
||||||
|
sys.exit()
|
||||||
|
try:
|
||||||
|
import csv
|
||||||
|
except ImportError:
|
||||||
|
print("You'll need the python csv module instaled on your system.")
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
consumer_key = "xxx"
|
||||||
|
consumer_secret = "yyy"
|
||||||
|
access_key = "aa-zzzz"
|
||||||
|
access_secret = "bbb"
|
||||||
|
|
||||||
|
def get_all_tweets(screen_name):
|
||||||
|
|
||||||
|
if (consumer_key == ""):
|
||||||
|
print("You need to set up the script first. Edit it and add your keys.")
|
||||||
|
return
|
||||||
|
|
||||||
|
#Twitter only allows access to a users most recent 3240 tweets with this method
|
||||||
|
|
||||||
|
#authorize x, initialize tweepy
|
||||||
|
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
|
||||||
|
auth.set_access_token(access_key, access_secret)
|
||||||
|
api = tweepy.API(auth)
|
||||||
|
|
||||||
|
#initialize a list to hold all the tweepy Tweets
|
||||||
|
alltweets = []
|
||||||
|
|
||||||
|
#make initial request for most recent tweets (200 is the maximum allowed count)
|
||||||
|
new_tweets = api.user_timeline(screen_name = screen_name,count=200)
|
||||||
|
|
||||||
|
#save most recent tweets
|
||||||
|
alltweets.extend(new_tweets)
|
||||||
|
|
||||||
|
#save the id of the oldest tweet less one
|
||||||
|
oldest = alltweets[-1].id - 1
|
||||||
|
|
||||||
|
#keep grabbing tweets until there are no tweets left to grab
|
||||||
|
while len(new_tweets) > 0:
|
||||||
|
print("getting tweets before %s" % (oldest))
|
||||||
|
|
||||||
|
#all subsiquent requests use the max_id param to prevent duplicates
|
||||||
|
new_tweets = api.user_timeline(screen_name = screen_name,count=200,max_id=oldest)
|
||||||
|
|
||||||
|
#save most recent tweets
|
||||||
|
alltweets.extend(new_tweets)
|
||||||
|
|
||||||
|
#update the id of the oldest tweet less one
|
||||||
|
oldest = alltweets[-1].id - 1
|
||||||
|
|
||||||
|
print("...%s tweets downloaded so far" % (len(alltweets)))
|
||||||
|
|
||||||
|
#transform the tweepy tweets into a 2D array that will populate the csv
|
||||||
|
outtweets = [[tweet.id_str, tweet.created_at, tweet.text] for tweet in alltweets]
|
||||||
|
|
||||||
|
#write the csv
|
||||||
|
with open('%s_tweets.csv' % screen_name, 'w') as f:
|
||||||
|
writer = csv.writer(f)
|
||||||
|
writer.writerow(["id","created_at","text"])
|
||||||
|
writer.writerows(outtweets)
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
if (len(sys.argv) == 2):
|
||||||
|
get_all_tweets(sys.argv[1])
|
||||||
|
else:
|
||||||
|
print("Please add the x account you want to back up as an argument.")
|
|
@ -1,11 +1,86 @@
|
||||||
from pytube import YouTube
|
import os
|
||||||
link = input('https://youtu.be/6M1rP2r672o')
|
import string
|
||||||
yt = Youtube(link)
|
from pytube import Playlist, YouTube
|
||||||
yt.streams.first().download()
|
from moviepy.editor import AudioFileClip
|
||||||
print('downloaded', link)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def MP4ToMP3(mp4, mp3):
|
||||||
|
FILETOCONVERT = AudioFileClip(mp4)
|
||||||
|
FILETOCONVERT.write_audiofile(mp3)
|
||||||
|
FILETOCONVERT.close()
|
||||||
|
|
||||||
|
def download_youtube_video(url, folder_path, quality, media_type,j):
|
||||||
|
# Create a YouTube object
|
||||||
|
yt = YouTube(url)
|
||||||
|
# Remove invalid characters from the title
|
||||||
|
valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
|
||||||
|
title = ''.join(c for c in yt.title if c in valid_chars)
|
||||||
|
|
||||||
|
# Get the streams based on the media type
|
||||||
|
if media_type == 'audio':
|
||||||
|
audio_stream = yt.streams.get_audio_only()
|
||||||
|
# Check if the stream is not None
|
||||||
|
if audio_stream is not None:
|
||||||
|
# Download the stream
|
||||||
|
try:
|
||||||
|
print(f"Downloading...")
|
||||||
|
audio_stream.download(output_path=folder_path, filename="temp_file.mp4")
|
||||||
|
print(f"Download completed!")
|
||||||
|
|
||||||
|
input_file = os.path.join(folder_path, f"temp_file.mp4")
|
||||||
|
output_file = os.path.join(folder_path, f"{title}.mp3")
|
||||||
|
print("Converting to mp3...")
|
||||||
|
MP4ToMP3(input_file, output_file)
|
||||||
|
print("Conversion completed!")
|
||||||
|
|
||||||
|
os.rename(output_file,f'{folder_path}\{title}.mp3')
|
||||||
|
os.remove(input_file)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
else:
|
||||||
|
print("No audio stream was found.")
|
||||||
|
|
||||||
|
else:
|
||||||
|
streams = yt.streams.filter(progressive=True)
|
||||||
|
|
||||||
|
# Get the stream based on the quality
|
||||||
|
stream = streams.filter(resolution=quality).first()
|
||||||
|
|
||||||
|
# Check if the stream is not None
|
||||||
|
if stream is not None:
|
||||||
|
# Download the stream
|
||||||
|
print(f"Downloading...")
|
||||||
|
stream.download(output_path=folder_path)
|
||||||
|
print(f"Download completed!")
|
||||||
|
else:
|
||||||
|
print(f"No stream with quality {quality} was found.")
|
||||||
|
|
||||||
|
def download_youtube_playlist(playlist_url,folder_path,quality,media_type):
|
||||||
|
try:
|
||||||
|
playlist = Playlist(playlist_url)
|
||||||
|
i = 0
|
||||||
|
for url in playlist:
|
||||||
|
video_title = YouTube(url).title
|
||||||
|
video_size = YouTube(url).streams.filter(resolution=quality).first().filesize/(1024*1024)
|
||||||
|
print(f"Video title: {video_title} \nVideo size: {'%.2f' % video_size} MB")
|
||||||
|
download_youtube_video(url,folder_path,quality,media_type,i)
|
||||||
|
print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
|
||||||
|
i += 1
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
playlist_url = input('Enter the URL of the YouTube playlist: ')
|
||||||
|
folder_path = input('Enter the path of the folder where you want to save the videos: ')
|
||||||
|
media_type = input('Enter the media type (audio or video): ')
|
||||||
|
if media_type == 'video':
|
||||||
|
quality = input('Enter the quality of the video (e.g. 720p, 1080p): ')
|
||||||
|
else:
|
||||||
|
quality = None
|
||||||
|
|
||||||
|
# Create the folder if it doesn't exist
|
||||||
|
if not os.path.exists(folder_path):
|
||||||
|
os.makedirs(folder_path)
|
||||||
|
|
||||||
|
# Download the playlist
|
||||||
|
download_youtube_playlist(playlist_url,folder_path,quality,media_type)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
beautifulsoup4==4.8.1
|
beautifulsoup4==4.8.1
|
||||||
chromedriver-binary==81.0.4044.69.0
|
chromedriver-binary==81.0.4044.69.0
|
||||||
colorama==0.4.3
|
colorama==0.4.3
|
||||||
requests==2.22.0
|
requests==2.31.0
|
||||||
selenium==3.141.0
|
selenium==3.141.0
|
||||||
termcolor==1.1.0
|
termcolor==1.1.0
|
|
@ -1,5 +1,5 @@
|
||||||
certifi==2022.12.7
|
certifi==2023.7.22
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
idna==2.10
|
idna==2.10
|
||||||
requests==2.24.0
|
requests==2.31.0
|
||||||
urllib3==1.26.5
|
urllib3==1.26.18
|
||||||
|
|
84
file-encrypt-decrypt/Pipfile.lock
generated
84
file-encrypt-decrypt/Pipfile.lock
generated
|
@ -24,11 +24,11 @@
|
||||||
},
|
},
|
||||||
"attrs": {
|
"attrs": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836",
|
"sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04",
|
||||||
"sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"
|
"sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.6'",
|
"markers": "python_version >= '3.7'",
|
||||||
"version": "==22.2.0"
|
"version": "==23.1.0"
|
||||||
},
|
},
|
||||||
"cffi": {
|
"cffi": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -101,54 +101,56 @@
|
||||||
},
|
},
|
||||||
"cryptography": {
|
"cryptography": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4",
|
"sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306",
|
||||||
"sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f",
|
"sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84",
|
||||||
"sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502",
|
"sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47",
|
||||||
"sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41",
|
"sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d",
|
||||||
"sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965",
|
"sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116",
|
||||||
"sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e",
|
"sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207",
|
||||||
"sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc",
|
"sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81",
|
||||||
"sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad",
|
"sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087",
|
||||||
"sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505",
|
"sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd",
|
||||||
"sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388",
|
"sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507",
|
||||||
"sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6",
|
"sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858",
|
||||||
"sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2",
|
"sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae",
|
||||||
"sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac",
|
"sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34",
|
||||||
"sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695",
|
"sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906",
|
||||||
"sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6",
|
"sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd",
|
||||||
"sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336",
|
"sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922",
|
||||||
"sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0",
|
"sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7",
|
||||||
"sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c",
|
"sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4",
|
||||||
"sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106",
|
"sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574",
|
||||||
"sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a",
|
"sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1",
|
||||||
"sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8"
|
"sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c",
|
||||||
|
"sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e",
|
||||||
|
"sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==39.0.1"
|
"version": "==41.0.3"
|
||||||
},
|
},
|
||||||
"importlib-metadata": {
|
"importlib-metadata": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad",
|
"sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4",
|
||||||
"sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"
|
"sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"
|
||||||
],
|
],
|
||||||
"markers": "python_version < '3.8'",
|
"markers": "python_version < '3.8'",
|
||||||
"version": "==6.0.0"
|
"version": "==6.7.0"
|
||||||
},
|
},
|
||||||
"more-itertools": {
|
"more-itertools": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41",
|
"sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d",
|
||||||
"sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab"
|
"sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.7'",
|
||||||
"version": "==9.0.0"
|
"version": "==9.1.0"
|
||||||
},
|
},
|
||||||
"packaging": {
|
"packaging": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2",
|
"sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61",
|
||||||
"sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"
|
"sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.7'",
|
||||||
"version": "==23.0"
|
"version": "==23.1"
|
||||||
},
|
},
|
||||||
"pluggy": {
|
"pluggy": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -183,11 +185,11 @@
|
||||||
},
|
},
|
||||||
"typing-extensions": {
|
"typing-extensions": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa",
|
"sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36",
|
||||||
"sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"
|
"sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"
|
||||||
],
|
],
|
||||||
"markers": "python_version < '3.8'",
|
"markers": "python_version < '3.8'",
|
||||||
"version": "==4.4.0"
|
"version": "==4.7.1"
|
||||||
},
|
},
|
||||||
"wcwidth": {
|
"wcwidth": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -198,11 +200,11 @@
|
||||||
},
|
},
|
||||||
"zipp": {
|
"zipp": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3",
|
"sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b",
|
||||||
"sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02"
|
"sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.7'",
|
||||||
"version": "==3.12.1"
|
"version": "==3.15.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"develop": {}
|
"develop": {}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Pillow==9.3.0
|
Pillow==10.2.0
|
||||||
|
|
|
@ -13,7 +13,7 @@ except:
|
||||||
|
|
||||||
user = input("Enter User id\n") #YOUR ID
|
user = input("Enter User id\n") #YOUR ID
|
||||||
Pass_w = input("\nEnter your Password\n") #YOUR Password
|
Pass_w = input("\nEnter your Password\n") #YOUR Password
|
||||||
reciever_id = input("\nEnter reciever id\n") #Reciever ID
|
receiver_id = input("\nEnter reciever id\n") #Reciever ID
|
||||||
msg = input("\nEnter message\n") #message
|
msg = input("\nEnter message\n") #message
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -24,7 +24,7 @@ except:
|
||||||
server.quit()
|
server.quit()
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
server.sendmail(user, reciever_id, msg)
|
server.sendmail(user, receiver_id, msg)
|
||||||
print("MAIL sent") #confirmation
|
print("MAIL sent") #confirmation
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
beautifulsoup4==4.9.3
|
beautifulsoup4==4.9.3
|
||||||
certifi==2022.12.7
|
certifi==2023.7.22
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
idna==2.10
|
idna==2.10
|
||||||
pkg-resources==0.0.0
|
pkg-resources==0.0.0
|
||||||
requests==2.24.0
|
requests==2.31.0
|
||||||
soupsieve==2.0.1
|
soupsieve==2.0.1
|
||||||
urllib3==1.26.5
|
urllib3==1.26.18
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
certifi==2022.12.7
|
certifi==2023.7.22
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
idna==2.8
|
idna==2.8
|
||||||
requests==2.22.0
|
requests==2.31.0
|
||||||
urllib3==1.26.5
|
urllib3==1.26.19
|
||||||
|
|
Loading…
Reference in New Issue
Block a user