pip install opencv-python dlib numpy imutils
Python for Engineers
Solve Problems by Coding Solutions - A Complete solution for python programming
Live Webcam Effects App
Puzzle Image Generator
pip install pillow
Command Palette GUI app
pip install fuzzywuzzy python-Levenshtein
Social Media Content Scheduler
Install Dependencies
pip install streamlit schedule selenium
social_scheduler_app.py
import streamlit as stimport sqlite3import datetime
# === DB Setup ===conn = sqlite3.connect('database.db', check_same_thread=False)c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY AUTOINCREMENT, platform TEXT, content TEXT, post_time TEXT)''')conn.commit()
# === Functions ===def add_post(platform, content, post_time): c.execute("INSERT INTO posts (platform, content, post_time) VALUES (?, ?, ?)", (platform, content, post_time)) conn.commit()
def get_all_posts(): c.execute("SELECT * FROM posts ORDER BY post_time") return c.fetchall()
def delete_post(post_id): c.execute("DELETE FROM posts WHERE id = ?", (post_id,)) conn.commit()
# === Streamlit UI ===st.title("📅 Social Media Content Scheduler")
with st.form("post_form"): platform = st.selectbox("Platform", ["Twitter", "LinkedIn", "Facebook", "Instagram"]) content = st.text_area("Post Content", max_chars=500) post_time = st.time_input("Post Time (24H)") submit = st.form_submit_button("➕ Schedule Post")
if submit: post_datetime = datetime.datetime.combine(datetime.date.today(), post_time) add_post(platform, content, post_datetime.strftime("%Y-%m-%d %H:%M:%S")) st.success("✅ Post scheduled!")
st.subheader("📋 Scheduled Posts")posts = get_all_posts()for post in posts: st.markdown(f"**[{post[1]}]** {post[2]} \n⏰ {post[3]}") if st.button(f"❌ Delete", key=post[0]): delete_post(post[0]) st.experimental_rerun()
Background Scheduler – scheduler.py
import sqlite3import scheduleimport timeimport datetimefrom selenium import webdriverfrom selenium.webdriver.common.by import By
# === Dummy Post Logic ===def post_to_platform(platform, content): print(f"🟢 Posting to {platform}: {content}") # You can replace below with Selenium logic to auto-login and post
# === Actual Scheduler ===def check_and_post(): conn = sqlite3.connect('database.db') c = conn.cursor()
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") c.execute("SELECT * FROM posts WHERE post_time <= ?", (now,)) posts_due = c.fetchall()
for post in posts_due: post_to_platform(post[1], post[2]) c.execute("DELETE FROM posts WHERE id = ?", (post[0],))
conn.commit() conn.close()
# === Start Scheduler ===schedule.every(1).minutes.do(check_and_post)
print("⏳ Scheduler running every minute...")while True: schedule.run_pending() time.sleep(30)
How to Run It
-
Start Streamlit App:
streamlit run social_scheduler_app.py 2. In another terminal, run the scheduler:
python scheduler.py
Travel Planner with Map Integration
import tkinter as tk
from tkinter import messagebox
import requests
import folium
from geopy.geocoders import Nominatim
import webbrowser
# === API KEY ===
WEATHER_API_KEY = "YOUR_OPENWEATHER_API_KEY"
# === Core Functions ===
def get_coordinates(place):
geolocator = Nominatim(user_agent="travel_planner")
location = geolocator.geocode(place)
if location:
return (location.latitude, location.longitude)
return None
def get_weather(city):
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={WEATHER_API_KEY}&units=metric"
response = requests.get(url)
data = response.json()
if data.get("main"):
temp = data["main"]["temp"]
weather = data["weather"][0]["description"]
return f"{temp}°C, {weather}"
return "Not found"
def estimate_cost(destinations):
return len(destinations) * 1500 # ₹1500 per destination (sample logic)
def show_map(destinations):
if not destinations:
messagebox.showerror("Error", "No destinations added!")
return
m = folium.Map(location=[20.5937, 78.9629], zoom_start=5)
for city in destinations:
coord = get_coordinates(city)
if coord:
weather = get_weather(city)
folium.Marker(coord, tooltip=f"{city}: {weather}").add_to(m)
else:
messagebox.showwarning("Warning", f"Could not locate {city}")
# Optional: Add route lines
coords = [get_coordinates(city) for city in destinations if get_coordinates(city)]
if len(coords) > 1:
folium.PolyLine(coords, color="blue", weight=2.5).add_to(m)
m.save("travel_map.html")
webbrowser.open("travel_map.html")
# === GUI ===
destinations = []
def add_destination():
city = city_entry.get()
if city:
destinations.append(city)
city_listbox.insert(tk.END, city)
city_entry.delete(0, tk.END)
def clear_destinations():
destinations.clear()
city_listbox.delete(0, tk.END)
def plan_trip():
if not destinations:
messagebox.showwarning("Empty", "Add destinations first.")
return
cost = estimate_cost(destinations)
show_map(destinations)
messagebox.showinfo("Trip Estimate", f"🗺️ Trip planned for {len(destinations)} places.\nEstimated Cost: ₹{cost}")
root = tk.Tk()
root.title("🧳 Travel Planner")
root.geometry("400x450")
tk.Label(root, text="Enter Destination City").pack(pady=5)
city_entry = tk.Entry(root, width=30)
city_entry.pack(pady=5)
tk.Button(root, text="➕ Add", command=add_destination).pack()
city_listbox = tk.Listbox(root, width=40)
city_listbox.pack(pady=10)
tk.Button(root, text="🗺️ Plan Trip", command=plan_trip).pack(pady=10)
tk.Button(root, text="❌ Clear All", command=clear_destinations).pack()
root.mainloop()