Examples
Comprehensive examples for using PopcatAPI Wrapper in real applications.
Discord Bot Integration
Basic Meme Bot
import discord
from discord.ext import commands
import popcat
bot = commands.Bot(command_prefix='!')
@bot.command()
async def drake(ctx, *, text):
"""Generate Drake meme with custom text"""
if ' | ' in text:
text1, text2 = text.split(' | ', 1)
meme_url = popcat.drake(text1, text2)
embed = discord.Embed(title="Drake Meme")
embed.set_image(url=meme_url)
await ctx.send(embed=embed)
else:
await ctx.send("Usage: `!drake text1 | text2`")
@bot.command()
async def weather(ctx, *, location):
"""Get weather information"""
try:
weather_data = popcat.weather(location)
embed = discord.Embed(
title=f"Weather in {weather_data['location']}",
color=0x3498db
)
embed.add_field(name="Temperature", value=weather_data['temperature'])
embed.add_field(name="Condition", value=weather_data['condition'])
embed.add_field(name="Humidity", value=weather_data['humidity'])
await ctx.send(embed=embed)
except Exception as e:
await ctx.send(f"Error getting weather: {e}")
bot.run('YOUR_BOT_TOKEN')
Advanced Image Processing Bot
@bot.command()
async def jail(ctx, user: discord.Member = None):
"""Put someone in jail"""
if user is None:
user = ctx.author
avatar_url = str(user.avatar.url)
jail_image = popcat.jail(avatar_url)
embed = discord.Embed(title=f"{user.display_name} is in jail! 🔒")
embed.set_image(url=jail_image)
await ctx.send(embed=embed)
@bot.command()
async def ship(ctx, user1: discord.Member, user2: discord.Member):
"""Ship two users together"""
avatar1 = str(user1.avatar.url)
avatar2 = str(user2.avatar.url)
ship_image = popcat.ship(avatar1, avatar2)
embed = discord.Embed(
title=f"💕 {user1.display_name} x {user2.display_name}",
description="Let's see how compatible they are!"
)
embed.set_image(url=ship_image)
await ctx.send(embed=embed)
Web Application
Flask API Server
from flask import Flask, jsonify, request
import popcat
app = Flask(__name__)
@app.route('/api/meme/drake', methods=['POST'])
def create_drake_meme():
data = request.get_json()
if not data or 'text1' not in data or 'text2' not in data:
return jsonify({'error': 'text1 and text2 required'}), 400
try:
meme_url = popcat.drake(data['text1'], data['text2'])
return jsonify({'meme_url': meme_url})
except Exception as e:
return jsonify({'error': str(e)}), 500
@app.route('/api/weather/<location>')
def get_weather(location):
try:
weather_data = popcat.weather(location)
return jsonify(weather_data)
except Exception as e:
return jsonify({'error': str(e)}), 500
@app.route('/api/random')
def random_content():
try:
content = {
'joke': popcat.joke(),
'fact': popcat.fact(),
'color': popcat.randomcolor(),
'showerthought': popcat.showerthought()
}
return jsonify(content)
except Exception as e:
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(debug=True)
FastAPI Implementation
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import popcat
app = FastAPI(title="PopcatAPI Wrapper API")
class DrakeMemeRequest(BaseModel):
text1: str
text2: str
class QuoteRequest(BaseModel):
image_url: str
text: str
name: str
@app.post("/meme/drake")
async def create_drake_meme(request: DrakeMemeRequest):
try:
meme_url = popcat.drake(request.text1, request.text2)
return {"meme_url": meme_url}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/meme/quote")
async def create_quote(request: QuoteRequest):
try:
quote_url = popcat.quote(request.image_url, request.text, request.name)
return {"quote_url": quote_url}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/weather/{location}")
async def get_weather(location: str):
try:
weather_data = popcat.weather(location)
return weather_data
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
Data Analysis
GitHub User Analysis
import popcat
import pandas as pd
import matplotlib.pyplot as plt
def analyze_github_users(usernames):
"""Analyze multiple GitHub users"""
users_data = []
for username in usernames:
try:
data = popcat.github(username)
users_data.append({
'username': data['username'],
'followers': data['followers'],
'public_repos': data['public_repos'],
'following': data['following']
})
except Exception as e:
print(f"Error fetching {username}: {e}")
df = pd.DataFrame(users_data)
# Create visualization
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# Followers distribution
axes[0, 0].bar(df['username'], df['followers'])
axes[0, 0].set_title('Followers Count')
axes[0, 0].tick_params(axis='x', rotation=45)
# Repositories count
axes[0, 1].bar(df['username'], df['public_repos'])
axes[0, 1].set_title('Public Repositories')
axes[0, 1].tick_params(axis='x', rotation=45)
# Following count
axes[1, 0].bar(df['username'], df['following'])
axes[1, 0].set_title('Following Count')
axes[1, 0].tick_params(axis='x', rotation=45)
# Follower to following ratio
df['ratio'] = df['followers'] / (df['following'] + 1)
axes[1, 1].bar(df['username'], df['ratio'])
axes[1, 1].set_title('Follower/Following Ratio')
axes[1, 1].tick_params(axis='x', rotation=45)
plt.tight_layout()
plt.show()
return df
# Usage
users = ['octocat', 'torvalds', 'gaearon', 'sindresorhus']
results = analyze_github_users(users)
print(results)
Weather Dashboard
import popcat
import streamlit as st
import plotly.graph_objects as go
def create_weather_dashboard():
st.title("🌤️ Weather Dashboard")
# Sidebar for city input
st.sidebar.header("Settings")
cities = st.sidebar.multiselect(
"Select cities:",
["London", "New York", "Tokyo", "Paris", "Sydney", "Dubai"],
default=["London", "New York", "Tokyo"]
)
if cities:
weather_data = []
for city in cities:
try:
data = popcat.weather(city)
weather_data.append({
'City': city,
'Temperature': data['temperature'],
'Condition': data['condition'],
'Humidity': data['humidity']
})
except Exception as e:
st.error(f"Error fetching weather for {city}: {e}")
if weather_data:
df = pd.DataFrame(weather_data)
# Display weather cards
cols = st.columns(len(cities))
for i, (_, row) in enumerate(df.iterrows()):
with cols[i]:
st.metric(
label=row['City'],
value=row['Temperature'],
delta=row['Condition']
)
st.write(f"💧 Humidity: {row['Humidity']}")
if __name__ == "__main__":
create_weather_dashboard()
Automation Scripts
Daily Content Generator
import popcat
import schedule
import time
from datetime import datetime
def generate_daily_content():
"""Generate daily content for social media"""
# Get random content
joke = popcat.joke()
fact = popcat.fact()
color = popcat.randomcolor()
showerthought = popcat.showerthought()
# Create a daily summary
content = f"""
🌅 Daily Content - {datetime.now().strftime('%Y-%m-%d')}
😂 Joke of the Day:
{joke}
🧠 Random Fact:
{fact}
🎨 Color of the Day:
{color['name']} ({color['hex']})
💭 Shower Thought:
{showerthought['thought']}
"""
print(content)
# You could save to file, post to social media, etc.
with open(f"daily_content_{datetime.now().strftime('%Y%m%d')}.txt", "w") as f:
f.write(content)
# Schedule the function
schedule.every().day.at("09:00").do(generate_daily_content)
# Keep the script running
while True:
schedule.run_pending()
time.sleep(1)
Bulk Image Processing
import popcat
import os
from concurrent.futures import ThreadPoolExecutor
import time
def process_image(image_url, effects=['jail', 'blur', 'greyscale']):
"""Apply multiple effects to an image"""
results = {}
for effect in effects:
try:
if effect == 'jail':
results[effect] = popcat.jail(image_url)
elif effect == 'blur':
results[effect] = popcat.blur(image_url)
elif effect == 'greyscale':
results[effect] = popcat.greyscale(image_url)
elif effect == 'drip':
results[effect] = popcat.drip(image_url)
elif effect == 'clown':
results[effect] = popcat.clown(image_url)
# Add delay to respect rate limits
time.sleep(0.5)
except Exception as e:
print(f"Error applying {effect} to {image_url}: {e}")
results[effect] = None
return results
def bulk_process_images(image_urls, max_workers=3):
"""Process multiple images concurrently"""
with ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = {executor.submit(process_image, url): url for url in image_urls}
results = {}
for future in futures:
url = futures[future]
try:
results[url] = future.result()
print(f"✅ Processed: {url}")
except Exception as e:
print(f"❌ Failed: {url} - {e}")
results[url] = None
return results
# Usage
image_urls = [
"https://example.com/image1.jpg",
"https://example.com/image2.jpg",
"https://example.com/image3.jpg"
]
processed = bulk_process_images(image_urls)
for url, effects in processed.items():
print(f"\n{url}:")
for effect, result_url in effects.items():
print(f" {effect}: {result_url}")