diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-04-02 00:48:20 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-04-02 00:48:20 +0400 |
commit | 4924654b03cb034291d6f3d523548a5453710ee7 (patch) | |
tree | 8ee94091a6d3b3c2d114fd6bcca70ed0be38555d /release | |
parent | 7f5e6b8626f7c76c4f20a54618c0063c6bf067dd (diff) |
Remove some experimental python script code.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/op/image.py | 311 |
1 files changed, 1 insertions, 310 deletions
diff --git a/release/scripts/op/image.py b/release/scripts/op/image.py index bb178a4ba4e..182ee262884 100644 --- a/release/scripts/op/image.py +++ b/release/scripts/op/image.py @@ -181,320 +181,11 @@ class ProjectApply(bpy.types.Operator): return {'FINISHED'} -#!/usr/bin/env python -# stripped down code from youtube-dl: -# http://bitbucket.org/rg3/youtube-dl/wiki/Home -# License: Public domain code - -import os -import os.path -import random -import re -import socket -import string -import tempfile -import time -import urllib -import urllib.request -import getpass - -std_headers = { - 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6', - 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', - 'Accept': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', - 'Accept-Language': 'en-us,en;q=0.5', -} - -class DownloadError(Exception): - pass - -class FileDownloader(object): - params = None - _ies = [] - _download_retcode = None - - def __init__(self, params): - self._ies = [] - self._download_retcode = 0 - self.params = params - - @staticmethod - def calc_percent(byte_counter, data_len): - if data_len is None: - return '---.-%' - return '%6s' % ('%3.1f%%' % (float(byte_counter) / float(data_len) * 100.0)) - - @staticmethod - def best_block_size(elapsed_time, bytes): - new_min = max(bytes / 2.0, 1.0) - new_max = min(max(bytes * 2.0, 1.0), 4194304) # Do not surpass 4 MB - if elapsed_time < 0.001: - return int(new_max) - rate = bytes / elapsed_time - if rate > new_max: - return int(new_max) - if rate < new_min: - return int(new_min) - return int(rate) - - @staticmethod - def verify_url(url): - request = urllib.request.Request(url, None, std_headers) - data = urllib.request.urlopen(request) - data.read(1) - url = data.geturl() - data.close() - return url - - def to_stdout(self, message, skip_eol=False, ignore_encoding_errors=False): - print(message) - - def to_stderr(self, message): - print(message) - - def trouble(self, message=None): - if message is not None: - self.to_stderr(message) - raise DownloadError(message) - self._download_retcode = 1 - - def report_progress(self, percent_str): - print(percent_str) - - def process_info(self, url, filename): - success = self._do_download(filename, url) - - def download(self, url, filename): - ie = YoutubeSearchIE(YoutubeIE(self)) - ie.extract(url, filename) - - return self._download_retcode - - def _do_download(self, filename, url): - stream = None - open_mode = 'wb' - request = urllib.request.Request(url, None, std_headers) - - # Establish connection - try: - data = urllib.request.urlopen(request) - except: - raise - - limit = 1024*256 # quarter of a megabyte max - - data_len = float(data.info().get('Content-length', None)) - byte_counter = 0 - block_size = 1024 - start = time.time() - while True: - # Download and write - before = time.time() - data_block = data.read(block_size) - after = time.time() - data_block_len = len(data_block) - if data_block_len == 0: - break - byte_counter += data_block_len - - # Open file just in time - if stream is None: - try: - stream = open(filename, open_mode) - except: - return False - stream.write(data_block) - block_size = self.best_block_size(after - before, data_block_len) - - # Progress message - percent_str = self.calc_percent(byte_counter, min(data_len, limit)) - self.report_progress(percent_str) - - if byte_counter > limit: - break - - return True - -class InfoExtractor(object): - _ready = False - _downloader = None - - def __init__(self, downloader=None): - self._ready = False - self._downloader = downloader - - def initialize(self): - if not self._ready: - self._real_initialize() - self._ready = True - - def extract(self, url, filename): - self.initialize() - return self._real_extract(url, filename) - -class YoutubeIE(InfoExtractor): - _VALID_URL = r'^((?:http://)?(?:\w+\.)?youtube\.com/(?:(?:v/)|(?:(?:watch(?:\.php)?)?[\?#](?:.+&)?v=)))?([0-9A-Za-z_-]+)(?(1).+)?$' - _LANG_URL = r'http://uk.youtube.com/?hl=en&persist_hl=1&gl=US&persist_gl=1&opt_out_ackd=1' - - def _real_initialize(self): - if self._downloader is None: - return - - # Set language - request = urllib.request.Request(self._LANG_URL, None, std_headers) - try: - urllib.request.urlopen(request).read() - except: - print("unable to set language") - return - - def _real_extract(self, url, filename): - # Extract video id from URL - video_id = re.match(self._VALID_URL, url).group(2) - - # Get video info - video_info_url = 'http://www.youtube.com/get_video_info?&video_id=%s&el=detailpage&ps=default&eurl=&gl=US&hl=en' % video_id - request = urllib.request.Request(video_info_url, None, std_headers) - try: - video_info_webpage = urllib.request.urlopen(request).read() - video_info = urllib.parse.parse_qs(str(video_info_webpage)) - except: - print("unable to download info") - return - - # "t" param - if 'token' not in video_info: - return - token = urllib.parse.unquote_plus(video_info['token'][0]) - video_real_url = 'http://www.youtube.com/get_video?video_id=%s&t=%s&eurl=&el=detailpage&ps=default&gl=US&hl=en' % (video_id, token) - - # Process video information - self._downloader.process_info(video_real_url, filename) - -class YoutubeSearchIE(InfoExtractor): - _TEMPLATE_URL = 'http://www.youtube.com/results?search_query=%s&page=%s&gl=US&hl=en' - _VIDEO_INDICATOR = r'href="/watch\?v=.+?"' - _youtube_ie = None - - def __init__(self, youtube_ie, downloader=None): - InfoExtractor.__init__(self, downloader) - self._youtube_ie = youtube_ie - - def _real_initialize(self): - self._youtube_ie.initialize() - - def _real_extract(self, query, filename): - n = 1 - - result_url = self._TEMPLATE_URL % (urllib.parse.quote_plus(query), 1) - request = urllib.request.Request(result_url, None, std_headers) - try: - page = str(urllib.request.urlopen(request).read()) - except: - print("unable to download search page") - return - - # Extract video identifiers - for mobj in re.finditer(self._VIDEO_INDICATOR, page): - video_id = page[mobj.span()[0]:mobj.span()[1]].split('=')[2][:-1] - self._youtube_ie.extract('http://www.youtube.com/watch?v=%s' % video_id, filename) - return - -### MAIN PROGRAM ### -def download_movie(search_terms, filename): - try: - urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler())) - urllib.request.install_opener(urllib.request.build_opener(urllib.request.HTTPCookieProcessor())) - socket.setdefaulttimeout(10) - - fd = FileDownloader({}) - fd.download(search_terms, filename) - return 1 - except DownloadError: - return 0 - -import bpy - -class MakeAMovie(bpy.types.Operator): - '''Make a movie button''' - bl_idname = "render.make_a_movie" - bl_label = "Make A Movie Button" - bl_options = {'REGISTER', 'UNDO'} - - def invoke(self, context, event): - context.scene.thinking = "thinking .. this may take a while" - context.manager.add_modal_handler(self) - return {'RUNNING_MODAL'} - - def modal(self, context, event): - try: - bpy.ops.render.view_cancel() - except: - pass - - try: - about = context.scene.about - filename = os.path.join(tempfile.gettempdir(), "make_a_movie.flv") - if not download_movie(about, filename): - context.scene.thinking = "make a movie button is out of inspiration" - return {'FINISHED'} - - ed = context.scene.sequence_editor - if ed and len(ed.sequences) > 0: - ed.sequences[0].filepath = filename - else: - bpy.ops.sequencer.movie_strip_add(path=filename) - - context.scene.render.file_format = 'AVI_JPEG' - context.scene.thinking = "make a movie button is done" - rd = context.scene.render - rd.render_stamp = True - rd.stamp_time = False - rd.stamp_date = False - rd.stamp_render_time = False - rd.stamp_frame = False - rd.stamp_scene = False - rd.stamp_camera = False - rd.stamp_filename = False - rd.stamp_marker = False - rd.stamp_sequencer_strip = False - rd.stamp_background = [1, 0, 0, 1] - rd.stamp_foreground = [0, 1, 0, 1] - rd.stamp_font_size = 16 - rd.stamp_note = True - rd.stamp_note_text = about.upper() + ", directed by " + getpass.getuser() - - bpy.ops.render.render('INVOKE_DEFAULT', animation=True) - except: - context.scene.render.render_stamp = False - context.scene.thinking = "make a movie button is out of inspiration" - - return {'FINISHED'} - -def panel_func(self, context): - if bpy.data.filename.find(".B25.blend") != -1: - layout = self.layout - - layout.separator() - layout.separator() - layout.operator("render.make_a_movie", icon='RENDER_ANIMATION') - layout.prop(context.scene, "about") - - layout.label(text=context.scene.thinking) - -subjects = ["Dreaming Elephants", "A Big Bunny", "Flying Pigs"] -about = subjects[random.randint(0, len(subjects)-1)] - -bpy.types.RENDER_PT_render.append(panel_func) -bpy.types.Scene.StringProperty(name="About", default=about, attr="about") -bpy.types.Scene.StringProperty(name="Thinking", default="Status:", attr="thinking") - classes = [ EditExternally, SaveDirty, ProjectEdit, - ProjectApply, - MakeAMovie] + ProjectApply] def register(): register = bpy.types.register |