Reputation: 27
I'm using pipenv with Python 3.9.
The following code makes an error on the line 13; from requests.packages.urllib3.util.retry import Retry.
The error message is; Import "requests.packages.urllib3.util.retry" could not be resolved. No quick fixes available.
But I have no clue what wrong is exactly. Everything is imported properly though.
import requests
from random import choice
import wget
from moviepy.editor import *
import urllib.request
from PIL import Image as IMG
import os
from keys import *
from datetime import datetime, date
from csv import reader
import pyttsx3
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
class DidYouKnow:
def __init__(self):
self.category = None
self.question = None
self.answer = None
self.searchKey = None
self.color = choice(['26,188,156', '22,160,133', '46,204,113', '39,174,96', '52,152,219', '41,128,185', '155,89,182',
'142,68,173', '52,73,94', '44,62,80', '241,196,15', '243,156,18', '230,126,34', '211,84,0', '231,76,60', '192,57,43'])
def __init__(self, category, question, answer, searchKey):
self.category = category
self.question = question
self.answer = answer
self.searchKey = searchKey
self.color = choice(['26,188,156', '22,160,133', '46,204,113', '39,174,96', '52,152,219', '41,128,185', '155,89,182',
'142,68,173', '52,73,94', '44,62,80', '241,196,15', '243,156,18', '230,126,34', '211,84,0', '231,76,60', '192,57,43'])
def generateVideo(self):
backgrounds = []
try:
# Download a Background Video
videos = session.get(f'https://pixabay.com/api/videos/?key={API_KEY}&q={self.searchKey}&min_width=1920&min_height=1080')
try:
videos = videos.json()
except Exception as e:
pass
if videos["total"] <= 0:
print(
f'Cannot find background video for {self.searchKey}, Adding random Background')
videos = session.get(f'https://pixabay.com/api/videos/?key={API_KEY}&category=backgrounds&min_width=1920&min_height=1080')
videos = videos.json()
# sorting videos to select best quality videos
for video in videos["hits"]:
for size in video["videos"]:
for quality in video["videos"][size]:
if video["videos"][size][quality] == 1920:
# print()
backgrounds.append(video["videos"][size])
background = choice(backgrounds)
wget.download(
background["url"], 'temp.mp4')
# Editing Video
try:
self.editVideo()
except Exception as err:
print("Editing Video", err)
except Exception as e:
print("Generating Video", e)
def editVideo(self):
try:
baseClip = VideoFileClip(
'temp.mp4')
Clip = baseClip.set_duration(16)
Clip = Clip.rotate(90)
# Clip = Clip.resize((1080,1920))
heading_clip = TextClip(
str(self.category), fontsize=100, color='white', bg_color=f'rgb({self.color})', font='Swis721-Cn-BT-Bold-Italic', align='center', kerning=6, transparent=True)
heading_clip = heading_clip.set_pos(
'top').set_duration(16).margin(20)
question_clip = TextClip(
str(self.question), fontsize=130, color='white', stroke_color='black', stroke_width=5, font='tahoma-bold', align='center', method='caption', bg_color=f'rgba({self.color},0.5)')
question_clip = question_clip.set_pos(
'center').set_duration(10).margin(10)
answer_clip = TextClip(
str(self.answer), fontsize=130, color=f'rgb({self.color})', stroke_color='black', stroke_width=5, font='Rockwell-Extra-Bold', align='center', method='caption', bg_color='black')
answer_clip = answer_clip.set_pos(
'center').set_duration(6).margin(10, color=(236, 240, 241))
print("trying to concatenate")
Fact = concatenate_videoclips(
[question_clip, answer_clip], method='chain')
Clip = CompositeVideoClip(
[Clip, heading_clip, Fact.set_position("center")])
#Generate Both Audio for Question And Answer
pyttsx3Driver = "sapi5"
if os.name == "nt":
pyttsx3Driver = "sapi5"
print(f"os windown, using sapi5 as Voice Generator Driver")
elif os.name == "posix":
pyttsx3Driver = "espeak"
print(f"os linux, using espeak as Voice Generator Driver")
else:
pyttsx3Driver = "nsss"
print(f"os mac, using nsss as Voice Generator Driver")
engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty('voice', choice(voices).id)
rate = engine.getProperty('rate')
engine.setProperty('rate', 125)
engine.save_to_file(self.question, 'question_audio.mp3')
engine.runAndWait()
engine.save_to_file(self.answer, 'answer_audio.mp3')
engine.runAndWait()
QuestionAudio = CompositeAudioClip(
[AudioFileClip('question_audio.mp3'), AudioFileClip(BACKGROUNDAUDIOFILE)])
QuestionAudio.set_duration(10)
QuestionAudio = CompositeAudioClip([QuestionAudio])
AnswerAudio = CompositeAudioClip(
[AudioFileClip('answer_audio.mp3')])
AnswerAudio.set_duration(6)
audio = concatenate_audioclips([QuestionAudio, AnswerAudio])
print(f'Audio Duration = {audio.duration}')
Clip.audio = audio
Clip.write_videofile(
f'output/{self.question}.mp4')
Clip.close()
baseClip.close()
os.remove('temp.mp4')
os.remove('backdrop.jpeg')
os.remove('background.jpeg')
except Exception as e:
print("Error at editing Video:",e)
def generatePromoPic(self):
try:
ims = session.get(f'https://pixabay.com/api/?key={API_KEY}&q={self.searchKey}&image_type=photo&orientation=horizontal&order=popular')
try:
ims = ims.json()
except Exception as E:
print(E)
if ims["total"] <= 0:
print(f'Cannot find image result for {self.searchKey}, Adding random Pic')
ims = session.get(f'https://pixabay.com/api/?key={API_KEY}&image_type=photo&orientation=horizontal&order=popular')
try:
ims = ims.json()
except Exception as E:
print(E)
photo = choice(ims["hits"])
print(f'Downloading: {photo["largeImageURL"]}')
opener = urllib.request.build_opener()
opener.addheaders = [
('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]
urllib.request.install_opener(opener)
# setting filename and image URL
filename = 'background.jpeg'
image_url = photo["largeImageURL"]
# calling urlretrieve function to get resource
urllib.request.urlretrieve(image_url, filename)
size = (1920,1920)
outfile = "backdrop.jpeg"
im = IMG.open(filename)
im.resize(size, IMG.ANTIALIAS)
im.save(outfile, "JPEG")
im = IMG.open(outfile)
print(im.size)
width, height = im.size
imageHeightRemaining = width - height
textheight = 200 if imageHeightRemaining < 200 else 300
BGCOLOR = choice(['#1ABC9C', '#16A085', '#2ECC71', '#27AE60', '#3498DB', '#2980B9', '#9B59B6',
'#8E44AD', '#34495E', '#2C3E50', '#F1C40F', '#F39C12', '#E67E22', '#D35400', '#E74C3C', '#C0392B'])
Title = TextClip(
str(self.category), color='white', font='tahoma-bold', align='center', method='caption', size=(1080, 100), bg_color='black').set_position("top")
Title = Title.margin(bottom=20)
thumbnail = TextClip(
str(self.question), color='white', bg_color=BGCOLOR, font='tahoma-bold', align='center', method='caption', size=(1080, textheight)).set_pos(('left', 'bottom'))
thumbnail = thumbnail.margin(top=10, bottom=20)
back = ImageClip(outfile)
back = back.margin(top=20, bottom=20, left=20, right=20)
bigBack = TextClip(
' ', color='black', bg_color='black', font='tahoma-bold', align='center', method='caption', size=(1080, 720)).set_pos(('left', 'bottom'))
final = CompositeVideoClip(
[bigBack, back.set_position("top"), thumbnail.set_position("bottom"), Title.set_position("top")])
final.save_frame(f'output/{self.question}.png', t=1)
final.close()
except Exception as e:
print("GeneratePromoPic", e)
def startProcess(category, question, answer, searchKey):
didyouknow = DidYouKnow(category, question, answer, searchKey)
if not os.path.exists('output'):
os.makedirs('output')
didyouknow.generatePromoPic()
print("PromoPic Generated \n")
didyouknow.generateVideo()
print("Video Generated \n")
with open('data.csv', 'r',) as read_obj:
csv_dict_reader = reader(read_obj)
next(csv_dict_reader)
for row in csv_dict_reader:
print(row)
startProcess(row[0], row[1], row[2], row[3])
Upvotes: 2
Views: 1254
Reputation: 464
requests no longer has vendored modules in request.package you will need to reference urllib3 directly
from urllib3.util import Retry
Upvotes: 3