python 上传视频到 youtube

使用 github 上的项目:https://github.com/tokland/youtube-upload/

    1. 安装 google-api-python-client 和 progressbar2
      b87c7aea9c6c469c88017b7e46a17de7
    2. 下载  https://github.com/tokland/youtube-upload/archive/master.zip  解压 zip,手动安装:
      399452eb34d640009ad9ee7560fe6596
    3. 上传视频

      youtube-upload –title=”标题必需写的” 1234.mp4

      • 第一次上传视频时,会出现登录验证(Oauth 2):
        b85a1c64da1d4441b57e75e2c38b1e09
      • 打开登录验证的网页
        截图20171106173202
        把 code 输入到 命令窗口就OK了。
      • 登录数据会保存下来复用(windows上的路径是:
        C:\Users\Administrator\.youtube-upload-credentials.json

        )。

    4. 大功造成!

检查网址存活性

通过python可以很方便的检测一个网址的存活(是不是404),即检测状态码,这种方式不必等待整个网址下载完整。

def check_url(url:str):
    p = urlparse(url)
    conn = HTTPConnection(p.netloc)
    conn.request('HEAD', p.path)
    resp = conn.getresponse()
    return resp.status < 400

使用起来也非常简单:

# True
check_url("http://www.baidu.com")
# False
check_url("http://www.baidu.com/does-not-exists.html")

selenium python停止Firefox加载(续)

如果你在使用selenium python时也碰到firefox一直加载的问题,而又没有比较好的解决方法,那么你也许可以试下这个反过来的思路:当它加载超时抛出异常。
仔细看selenium python的源码,发现它有一个api:

driver.set_page_load_timeout

注意单位是秒,如果网页加载超过了你设置的时间,那么它会发生异常:

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for page load.

同时它还有另外一个api:

driver.set_script_timeout

这个是用来设置网页上脚本执行的超时时间(秒)。

‘Can not connect to GhostDriver’

我的环境是Mac OSX、Intellij IDEA、Python 3.5、Selenium、PhantomJS,结果在测试PhantomJS时:

driver = webdirver.PhantomJS()
dirver.get('http://www.baidu.com')
print(driver.current_url)
driver.quit()

老是出现错误:

WebDriverException: Message: 'Can not connect to GhostDriver'

解决这个问题也很简单,就是确保Python和PhantomJS在同一运行环境下,如果你的Python Interpreter是放在virtualenv里,而PhantomJS是安装在系统里的(通过brew安装?)那就会有这样的问题。
所以我最终在Run/Debug Configurations里把Python Interpreter指向系统的Python就可以了。

让一句马(PHP)成为你的代理服务器

既然一句马是可以执行php代码,那么把一段实现代理功能的php代码交给一句马就让它变成一台简单的代理服务器了。

参照Simple PHP Proxy,精简出代码:

<?PHP
$url = $_GET['url'];
$ch = curl_init($url);
if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
}
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_GET['user_agent'] ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT']);
list($header, $contents) = preg_split('/([\r\n][\r\n])\\1/', curl_exec($ch), 2);
$status = curl_getinfo($ch);
curl_close($ch);
$header_text = preg_split('/[\r\n]+/', $header);
foreach ($header_text as $header) {
    if (preg_match('/^(?:Content-Type|Content-Language|Set-Cookie):/i', $header)) {
        header($header);
    }
}
print $contents;
exit;
?>

然后,你需要把它转为一行,比如用python:

''.join(open('[path-to-nano-proxy.php]').read().replace('<?PHP', '').replace('?>', '').split('\n'))

使用的时候也很简单,就是向这个一句马传递一个url参数就可以,例如:

http://[url-to-nano-proxy.php]?url=http://www.google.com

这样你的一句马不仅能用来管理网站,还可以能做代理服务器。

selenium python停止Firefox加载

在用selenium+python+Firefox时发现:

driver.get(“http://www.itamt.com”)

程序会保持执行一直到整个页面加载完毕或用户停止页面加载(点击Firefox上的停止按钮),但是有的网页会当有使用外部资源时会一直处于加载状态,特别当使用墙外资源时这个情况就更加严重了。

可翻遍了selenium.webdriver.Firefox也找不到可以stop loading的API。最后不得不放弃,不知道哪位还有办法吗?

我现在的解决方案是不用Firefox driver,改用phantomjs的,selenium+python+phantomjs的环境下貌似自带了GhostDriver(我搞不清楚是phantomjs还是selenium python带的),安装也十分容易。但目前还没有空把以前的项目都迁移过来。

到时再作作这方面的介绍。

caidao.py

写了个python的菜刀(caidao.py),一句话马用来管理网站其实很方便,虽然总是被用于黑来黑去的(webshell)。

🙁

当然也可以直接用chopper.exe,但总是要担心安全问题。

我得做自己的菜刀啊,所以就有了caidao.py,不知道有没有人已经做这件事情了。

目前支持简单的文件操作:upload/remove/download/rename/mkdir/cd

等再成熟点就放到github上。