خودکارسازی با پایتون

ابزارهایی که کمک کردند بیشتر کار کنم و کمتر خسته شوم

در این پست از بلاگ Bennu AI قصد داریم یاد بگیریم که چطور می‌توان برخی از کارهای تکراری و خسته‌کننده روزمره را به پایتون سپرد. با استفاده از این اسکریپت‌ها، پایتون به دستیار هوشمندی تبدیل می‌شود که بهره‌وری‌تان را افزایش می‌دهد. از تولید کتاب صوتی گرفته تا مدیریت ایمیل‌ها و یادآوری کارها، این ابزارها می‌توانند زمانتان را آزاد کنند تا بر کارهای مهم‌تر تمرکز کنید.

1. Speakify

من عاشق کتاب‌ هستم اما گاها فرصت کافی برای مطالعه پیدا نمی‌کنم. این اسکریپت خودکار پایتون به من کمک کرد تا کتاب یا پی‌دی‌اف مورد نظرم را تبدیل به کتاب صوتی کنم. از دیگر کاربردهای این ابزار می‌توان به فراهم کردن دسترسی به متون برای افراد نابینا، یادگیری در حین رفت و آمد یا ورزش و همچنین کمک به زبان‌آموزان برای تقویت مهارت‌های شنیداری‌ اشاره کرد.
				
					import PyPDF2
import pyttsx3

# Open the PDF file (Enter Path To Your PDF)
file = open('story.pdf', 'rb')
readpdf = PyPDF2.PdfReader(file)

# Initialize text-to-speech engine
speaker = pyttsx3.init()
rate = speaker.getProperty('rate')   # Get current speaking rate
speaker.setProperty('rate', 200)

volume = speaker.getProperty('volume')
speaker.setProperty('volume', 1)  # Set volume level (0.0 to 1.0)

# Get and set a different voice
voices = speaker.getProperty('voices')
for voice in voices:
    if "english" in voice.name.lower() and "us" in voice.name.lower():
        speaker.setProperty('voice', voice.id)
        break
# Iterate over each page in the PDF
for pagenumber in range(len(readpdf.pages)):
    # Extract text from the page
    page = readpdf.pages[pagenumber]
    text = page.extract_text()
    
    # Use the speaker to read the text
    # speaker.say(text)
    # speaker.runAndWait()

# Save the last extracted text to an audio file (if needed)
speaker.save_to_file(text, 'story.mp3')
speaker.runAndWait()

# Stop the speaker
speaker.stop()

# Close the PDF file
file.close()
				
			

2. TabTornado

قبل از این اسکریپت پایتون مطالب جالبی را که برای مطالعه آینده درنظر داشتم، بوکمارک می‌کردم. هرچند بعد از مدتی متوجه شدم که فهرست بوکمارک‌هایم هرروز بزرگ‌تر می شود و پیدا کردن مطالب در آن‌ها سخت‌تر. با استفاده از TabTornado، می توانم همه لینک‌ها را کپی و پیست کنم و سپس تنها با یک کلیک به آنها دسترسی داشته باشم. این ابزار همچنین برای افرادی که در روتین کاری خود نیاز دارند چندین سایت را مرتب چک کنند، مفید است؛ زیرا این روتین را ساده‌تر کرده و به آن‌ها امکان می‌دهد بر محتوای کار تمرکز کنند.
				
					import webbrowser
with open('links.txt') as file:
    links = file.readlines()
    for link in links: 
        webbrowser.open('link')
				
			

3. PicFetcher

جمع‌آوری حجم زیادی از داده‌های تصویری یک چالش اساسی در پروژه‌های بینایی کامپیوتر است. همان‌ طور که اندرو نگ اشاره می‌کند: “داشتن یک مجموعه‌‌ی بزرگ داده می‌تواند مهم‌تر از الگوریتم خاص مورد استفاده باشد.” داده‌های باکیفیت برای بهبود عملکرد و دقت مدل‌های یادگیری ماشین حیاتی هستند. این اسکریپت خودکار فرآیند را آسان‌تر می‌کند و به شما این امکان را می‌دهد که تنها در چند دقیقه و چند خط کد، تعداد مشخصی تصویر را از دانلود می‌کنید.
مجموعه داده تصویری
Script Output — Screenshot Taken By Author
				
					# Importing the necessary module and function
from simple_image_download import simple_image_download as simp 

# Creating a response object
response = simp.simple_image_download

## Keyword
keyword = "Dog"

# Downloading images
try:
    response().download(keyword, 20)
    print("Images downloaded successfully.")
except Exception as e:
    print("An error occurred:", e)
				
			

4.PyInspector

هر توسعه دهنده‌ای از کلافگی ناشی از ردیابی باگ‌ها در کد پایتون خبر دارد. نوشتن کد کارآمد و در عین حال تمیز بسیار مهم است، اما بررسی دستی کد ممکن است دشوار باشد. این اسکریپت خودکار با کمک Pylint  و Flake8 کد شما را کامل بررسی می‌کند، آن را با استاندارد‌های برنامه‌نویسی مقایسه می‌کند و خطاهای منطقی را مشخص می‌کند. PyInspector اطمینان حاصل می‌کند کد شما استاندارد و بدون ارور باشد.

				
					import os
import subprocess

def analyze_code(directory):
    # List Python files in the directory
    python_files = [file for file in os.listdir(directory) if file.endswith('.py')]

    if not python_files:
        print("No Python files found in the specified directory.")
        return

    # Analyze each Python file using pylint and flake8
    for file in python_files:
        print(f"Analyzing file: {file}")
        file_path = os.path.join(directory, file)

        # Run pylint
        print("\nRunning pylint...")
        pylint_command = f"pylint {file_path}"
        subprocess.run(pylint_command, shell=True)

        # Run flake8
        print("\nRunning flake8...")
        flake8_command = f"flake8 {file_path}"
        subprocess.run(flake8_command, shell=True)

if __name__ == "__main__":
    directory = r"C:\Users\abhay\OneDrive\Desktop\Part7"
    analyze_code(directory)
				
			

5. DataDummy

اگر شما یک دانشمند داده هستید که به داده‌های نمونه برای تست مدل‌ها نیاز دارد یا صرفا دنبال پر کردن یک فرم غیرضروری با اطلاعات رندوم هستید، این اسکریپت خودکار پایتون به کمک شما می آید. DataDummy دیتا‌ست هایی با ظاهر واقع گرایانه اما کاملا مصنوعی تولید می‌کند که برای اهداف تست، توسعه و شبیه سازی بسیار مناسب هستند. این ابزار می‌تواند به سرعت نام‌ها، ایمیل‌ها، شماره‌های تلفن و … را تولید کند و راه حلی چند‌منظوره برای نیازهای مختلف تولید داده ارائه دهد.

				
					import pandas as pd
from faker import Faker
import random

fake = Faker()

def generate_fake_data(num_entries=10):
    data = []

    for _ in range(num_entries):
        entry = {
            "Name": fake.name(),
            "Address": fake.address(),
            "Email": fake.email(),
            "Phone Number": fake.phone_number(),
            "Date of Birth": fake.date_of_birth(minimum_age=18, maximum_age=65).strftime("%Y-%m-%d"),
            "Random Number": random.randint(1, 100),
            "Job Title": fake.job(),
            "Company": fake.company(),
            "Lorem Ipsum Text": fake.text(),
        }
        data.append(entry)

    return pd.DataFrame(data)

if __name__ == "__main__":
    num_entries = 10  # You can adjust the number of entries you want to generate
    fake_data_df = generate_fake_data(num_entries)

    

## Dataframe with Fake Data
fake_data_df
				
			

6. BgBuster

این اسکریپت خودکار پایتون به یک بخش ضروری از جعبه‌ابزار روزانه من تبدیل شده است. به عنوان یک نویسنده من مکررا با تصاویر کار می‌کنم و اغلب نیاز دارم که این عکس‌ها پیش زمینه‌ای نداشته باشند. درحالیکه ابزارهای آنلاین زیادی برای حذف پیش‌زمینه عکس‌ها وجود دارد اما موقع استفاده از آن‌ها من نگرانی هایی در ارتباط با امنیت عکس‌هایم دارم. در این اسکریپت با استفاده از پکیج rembg پیش زمینه عکس به طور محلی حذف می‌شود و درنتیجه امنیت عکس‌ها تضمین می‌شود.

				
					from rembg import remove 
from PIL import Image

## Path for input and output image
input_img = 'monkey.jpg'
output_img = 'monkey_rmbg.png'

## loading and removing background
inp = Image.open(input_img)
output = remove(inp)

## Saving new image 
output.save(output_img)
				
			

7.MemoryMate

برای جلوگیری از فراموش کردن کارها، یادآور دیجیتال MemoryMate را توسعه دادم. این برنامه یادآورهای سفارشی در زمان مقرر برای من ارسال می‌کند تا اطمینان حاصل شود که همه وظایف به موقع انجام می‌شوند. با کمک این برنامه بهره‌وری من افزایش داشته و انجام کارها قبل از ددلاین آن‌ها، آسان‌تر شده است. این برنامه ساده، تکرار کردن آن راحت و بسیار کاربردی است.

reminder
				
					from win10toast import ToastNotifier
import time

toaster = ToastNotifier()

def set_reminder():
    reminder_header = input("What would you like me to remember?\n")
    related_message = input("Related Message:\n")
    time_minutes = float(input("In how many minutes?\n"))

    time_seconds = time_minutes * 60

    print("Setting up reminder...")
    time.sleep(2)
    print("All set!")

    time.sleep(time_seconds)

    toaster.show_toast(
        title=f"{reminder_header}",
        msg=f"{related_message}",
        duration=10,
        threaded=True
    )

    while toaster.notification_active():
        time.sleep(0.005)

if __name__ == "__main__":
    set_reminder()
				
			

8. MonitorMax

نظارت بر منابع سیستم برای اطلاع از میزان و نحوه استفاده‌ از آن‌ها حیاتی است. این ابزار برای کاربران، مدیران سیستم و توسعه‌دهندگانی که نیاز به بررسی عملکرد سیستم، شناسایی گلوگاه‌ها و اطمینان از مدیریت کارآمد منابع دارند، ارزشمند است. MonitorMax به نظارت بر استفاده از CPU، GPU، باتری و حافظه کمک می‌کند و در صورتی که استفاده از منابع از حد ایمن فراتر رود، هشدار می‌دهد. با ردیابی تمام منابع، می‌توانید اطمینان حاصل کنید که از آن‌ها بهینه استفاده می‌شود، همچنین می‌توانید با کمک Tkinter یک داشبورد نظارت بر منابع ایجاد کنید تا یک گراف شبیه به taskbar داشته باشید.

				
					import psutil
import time
from win10toast import ToastNotifier

# Initialize the ToastNotifier object
toaster = ToastNotifier()

# Set the threshold values for CPU usage, memory usage, GPU usage, and battery level
cpu_threshold = 40  # Percentage
memory_threshold = 40  # Percentage
gpu_threshold = 40  # Percentage
battery_threshold = 100  # Percentage

# Infinite loop to continuously monitor system resources
while True:
    try:
        # Get system resource information
        cpu_usage = psutil.cpu_percent(interval=1)
        memory_usage = psutil.virtual_memory().percent
        gpu_usage = psutil.virtual_memory().percent
        battery = psutil.sensors_battery()

        # Check CPU usage
        if cpu_usage >= cpu_threshold:
            message = f"CPU usage is high: {cpu_usage}%"
            toaster.show_toast("Resource Alert", message, duration=10)

        # Check memory usage
        if memory_usage >= memory_threshold:
            message = f"Memory usage is high: {memory_usage}%"
            toaster.show_toast("Resource Alert", message, duration=10)

        # Check GPU usage
        if gpu_usage >= gpu_threshold:
            message = f"GPU usage is high: {gpu_usage}%"
            toaster.show_toast("Resource Alert", message, duration=10)

        # Check battery level
        if battery is not None and battery.percent <= battery_threshold and not battery.power_plugged:
            message = f"Battery level is low: {battery.percent}%"
            toaster.show_toast("Battery Alert", message, duration=10)

        # Wait for 5 minutes before checking the resources again
        time.sleep(300)

    except Exception as e:
        print("An error occurred:", str(e))
        break
				
			
system alert

9.EmailBlitz

مدیریت ایمیل‌های انبوه می‌تواند چالش‌برانگیز باشد اما EmailBlitz کار را آسان‌تر می‌کند و به شما این امکان را می‌دهد که به‌راحتی به تعداد مورد نظر ایمیل‌ ارسال کنید. این اسکریپت به شما امکان دسترسی به یک گروه بزرگ از دریافت‌کنندگان به‌طور همزمان را می‌دهد و اطمینان حاصل می‌کند که پیام‌ها به‌موقع و درست ارسال می‌شوند. این اسکریپت برای بازاریابان، مدیران یا هر کسی که نیاز به ارسال تعداد زیادی ایمیل دارد، کاربردی است و با صرفه جویی در زمان بهره‌وری را افزایش می‌دهد.

				
					import smtplib 
from email.message import EmailMessage
import pandas as pd

def send_email(remail, rsubject, rcontent):
    email = EmailMessage()                          ## Creating a object for EmailMessage
    email['from'] = 'The Pythoneer Here'            ## Person who is sending
    email['to'] = remail                            ## Whom we are sending
    email['subject'] = rsubject                     ## Subject of email
    email.set_content(rcontent)                     ## content of email
    with smtplib.SMTP(host='smtp.gmail.com',port=587)as smtp:     
        smtp.ehlo()                                 ## server object
        smtp.starttls()                             ## used to send data between server and client
        smtp.login(SENDER_EMAIL,SENDER_PSWRD)       ## login id and password of gmail
        smtp.send_message(email)                    ## Sending email
        print("email send to ",remail)              ## Printing success message



if __name__ == '__main__':
    df = pd.read_excel('list.xlsx')
    length = len(df)+1

    for index, item in df.iterrows():
        email = item[0]
        subject = item[1]
        content = item[2]

        send_email(email,subject,content)
				
			

10. ClipSaver

حتما برای شما هم پیش آمده که هنگام کار با متن سردرگم شوید و از یاد ببرید که چه چیزی را کپی کرده اید. تصور کنید ابزاری دارید که تمامی متن‌هایی که در طول روز کپی می‌کنید را ثبت می‌کند. ClipSaver هرچیزی که کپی می‌کنید را ردیابی کرده و به‌طور یکپارچه هر قطعه متن ذخیره می‌کند. با این ابزار دیگر نیازی به جستجو در میان تب‌های بی‌پایان و نگرانی برای از دست رفتن اطلاعات ارزشمند نیست. 

				
					import tkinter as tk
from tkinter import ttk
import pyperclip

def update_listbox():
    new_item = pyperclip.paste()
    if new_item not in X:
        X.append(new_item)
        listbox.insert(tk.END, new_item)
        listbox.insert(tk.END, "----------------------")
    listbox.yview(tk.END)
    root.after(1000, update_listbox)

def copy_to_clipboard(event):
    selected_item = listbox.get(listbox.curselection())
    if selected_item:
        pyperclip.copy(selected_item)

X = []

root = tk.Tk()
root.title("Clipboard Manager")
root.geometry("500x500")
root.configure(bg="#f0f0f0")

frame = tk.Frame(root, bg="#f0f0f0")
frame.pack(padx=10, pady=10)

label = tk.Label(frame, text="Clipboard Contents:", bg="#f0f0f0")
label.grid(row=0, column=0)

scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

listbox = tk.Listbox(root, width=150, height=150, yscrollcommand=scrollbar.set)
listbox.pack(pady=10)
scrollbar.config(command=listbox.yview)

update_listbox()

listbox.bind("", copy_to_clipboard)

root.mainloop()
				
			
copy saver

11. BriefBot

من هم مانند بسیاری از افراد علاقمند به خواندن مقالات و نشریات خبری هستم، با این حال پیدا کردن زمان برای خواندن کامل مقالات با وجود مشغله‌های روزمره، چالش برانگیز است. BriefBot با استفاده از شبکه‌های عصبی این مشکل را حل می‌کند و به سرعت خلاصه‌ تولید می‌کند. این اسکریپت با استفاده از وب‌کاوی (Web Scraping) محتوای مقاله را استخراج کرده و آن را به یک مدل از پیش آموزش‌دیده می‌دهد تا یک چکیده تولید کند. با استفاده از این اسکریپت خودکار پایتون می‌توان با صرف زمان کم‌تر، همچنان آگاه و به‌روز ماند.

				
					from transformers import BartForConditionalGeneration, BartTokenizer
import requests
from bs4 import BeautifulSoup

## Function to summarize article
def summarize_article(article_text, max_length=150):
    model_name = "facebook/bart-large-cnn"
    tokenizer = BartTokenizer.from_pretrained(model_name)
    model = BartForConditionalGeneration.from_pretrained(model_name)

    inputs = tokenizer.encode("summarize: " + article_text, return_tensors="pt", max_length=1024, truncation=True)
    summary_ids = model.generate(inputs, max_length=max_length, min_length=50, length_penalty=2.0, num_beams=4, early_stopping=True)

    summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
    return summary

## Function to scrape content of the aricle 
def scrape_webpage(url):
    try:
        response = requests.get(url)
        response.raise_for_status()
        soup = BeautifulSoup(response.text, 'html.parser')
        all_text = soup.get_text(separator='\n', strip=True)
        return all_text
    except requests.exceptions.RequestException as e:
        print(f"Error: {e}")
        return None

if __name__ == "__main__":
    webpage_url = "https://www.bleepingcomputer.com/news/security/meet-brain-cipher-the-new-ransomware-behind-indonesia-data-center-attack/" ## Sample URL for Testing The Script
    webpage_text = scrape_webpage(webpage_url)

    if webpage_text:
        summary = summarize_article(webpage_text)
        print("\nSummarized Article:")
        print(summary)
    else:
        print("Webpage scraping failed.")
				
			

12. SpellGuard

مهم نیست چقدر در زبان انگلیسی مهارت داریم، هنگام نوشتن گزارش‌های طولانی، همه ما اشتباهات املایی و گرامری مرتکب می‌شویم. در عصر هوش مصنوعی، پکیج‌های پایتون قدرتمندی  وجود دارند که می‌توانند این اشتباهات را اصلاح کرده و یک بازبینی دقیق از نوشته ارائه دهند. SpellGuard از هوش مصنوعی برای شناسایی و تصحیح اشتباهات املایی و گرامری استفاده می‌کند و اطمینان حاصل می‌کند که نوشته شما واضح، دقیق و حرفه‌ای است.

spell check
				
					## Installing Library
!pip install lmproof

## Importing Library
import lmproof as lm

## Function for proofreading 
def Proofread(text):
    proof = lm.load("en")
    error_free_text = proof.proofread(text)
    return error_free_text

## Sample Text
TEXT = '' ## Place sample Text here

## Function Call 
Print(Proofread(TEXT))
				
			

13. LinkStatus

داشتن یک وبلاگ حرفه ای هنوز هم برای بسیاری از نویسندگان یک رویاست. اطمینان از اینکه تمام لینک‌های شما به‌درستی کار می‌کنند برای حفظ یک وبلاگ بسیار مهم است. لینک‌های خراب می‌توانند باعث ناامیدی خوانندگان شده و اعتبار سایت شما را خدشه‌دار کنند. این اسکریپت خودکار پایتون با نظارت منظم بر URLهای شما، اطمینان حاصل می‌کند که لینک‌های شما همیشه فعال و کاربردی هستند، که به بهبود اعتبار و تجربه کاربری سایت شما کمک می‌کند.

				
					Copy
import csv
import requests
import pprint

def get_status(website):
    try:
        status = requests.get(website).status_code
        return "Working" if status == 200 else "Error 404"
    except:
        return "Connection Failed!!"

def main():
    with open("sites.txt", "r") as fr:
        websites = [line.strip() for line in fr]
    
    web_status_dict = {website: get_status(website) for website in websites}
    
    pprint.pprint(web_status_dict)
    
    # Write results to CSV file
    with open("web_status.csv", "w", newline='') as csvfile:
        fieldnames = ["Website", "Status"]
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        
        writer.writeheader()
        for website, status in web_status_dict.items():
            writer.writerow({"Website": website, "Status": status})

        print("Data Uploaded to CSV File!!")

if __name__ == "__main__":
    main()
				
			
link check

14. DailyDigest

 آگاه ماندن از آخرین اتفاقات شهر، ایالت، کشور یا جهان برای همه ما مهم است، اما برنامه‌ کاری شلوغ، اغلب مانع از اختصاص وقت برای خواندن اخبار می‌شود. DailyDigest این مشکل را با استخراج اخبار مهم از Google News و خواندن آن‌ها حل می‌کند. در هر لحظه از روز، این اسکریپت خودکار به‌راحتی اطمینان می‌دهد که از مهم‌ترین اخبار روز آگاه بمانید.

				
					
import pyttsx3 
import requests

engine = pyttsx3.init('sapi5')
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id)

def speak(audio):
    engine.say(audio)
    engine.runAndWait()

def trndnews(): 
    url = " http://newsapi.org/v2/top-headlines?country=us&apiKey=GET_YOUR_OWN"
    page = requests.get(url).json() 
    article = page["articles"] 
    results = [] 
    for ar in article: 
        results.append(ar["title"]) 
    for i in range(len(results)): 
        print(i + 1, results[i]) 
    speak(results)
    
trndnews() 
 
''' Run The Script To Get The Top Headlines From USA'''
				
			

15. QRGenie

محبوبیت کدهای QR از زمانی که مردم شروع به استفاده از آن‌ها برای ارسال و دریافت پرداخت‌ها کردند، به شدت افزایش یافت. امروزه از آن‌ها برای به اشتراک گذاشتن لینک‌های اجتماعی، پیام‌های محرمانه، کدهای تخفیف و موارد دیگر استفاده می‌شود. این اسکریپت خودکار پایتون به شما کمک می‌کند تا کدهای QR سفارشی با داده‌های مورد نظر خود ایجاد کنید و به راحتی اطلاعات را به اشتراک بگذارید.

Generated QR Code — Try it out 😉
				
					import qrcode

def generate_qr_code(link, filename):
    """Generates a QR code for the given link and saves it as filename."""

    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    qr.add_data(link)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")
    img.save("profile.png")

if __name__ == "__main__":
    generate_qr_code("https://abhayparashar31.medium.com/", "Profile.png")
    print(f"QR code saved successfully!!")
				
			

16. ShrinkLink

من روزانه با لینک‌های زیادی سروکار دارم، برخی را ذخیره می‌کنم و برخی را با دیگران به اشتراک می‌گذارم. چیزی که در مورد URLها آزاردهنده است، طولانی بودن برخی از آن‌هاست. ShrinkLink به‌طور مؤثری این مشکل را با استفاده از یک API خارجی برای تبدیل URLهای طولانی به لینک‌های کوتاه و قابل مدیریت حل می‌کند.

shrinked link
				
					import pyshorteners
def generate_short_url(long_url):
  s = pyshorteners.Shortener()
  return s.tinyurl.short(long_url)

long_url = input('Paste Long URl \n')
short_url = generate_short_url(long_url)
print(short_url)
				
			

17. CaptureIt

اگر گیمر، اینفلوئنسر، هنرمند، معلم یا توسعه دهنده هستید، نرم‌افزار ضبط صفحه برای فعالیت‌هایتان ضروری است. با این حال، بسیاری از راه‌حل‌های موجود هزینه‌بر هستند یا محدودیت‌هایی مانند واترمارک و محدودیت زمانی اعمال می‌کنند. CaptureIt یک راه‌حل ساده برای ضبط صفحه بدون واترمارک و محدودیت زمانی همراه با گزینه‌های سفارشی‌سازی پنجره صفحه ارائه می‌دهد.

				
					import pyshorteners
def generate_short_url(long_url):
  s = pyshorteners.Shortener()
  return s.tinyurl.short(long_url)

long_url = input('Paste Long URl \n')
short_url = generate_short_url(long_url)
print(short_url)
				
			

این پست از سایت مرکز هوش مصنوعی بنو برگرفته از نوشته ی لینک زیر میباشد:

https://medium.com/pythoneers/17-mindblowing-python-automation-scripts-i-use-everyday-523fb1eb9284

برای دیدن پست های قبلی سایت بنو در مورد جدیدترین رویدادهای هوش مصنوعی، به این لینک مراجعه کنین!

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


1 − = هیچ