本博客文章已转移到独立博客,请点击做最好的三三查看全文。
2
16
2013
30

bpcs_uploader - 百度网盘上传脚本

本博客文章已转移到独立博客,查看本文请点击做最好的三三查看全文。

碎碎念先:寒假都快结束了,这才第二发……好吧,这个脚本纯属无聊的作品。之前不是有用脚本上传dropbox的嘛,我寻思着写个百度网盘的用用看。我那蹩脚的Prel和shell script根本没法完成这种略微有点技术含量的东西,所以完全使用php来写了。

项目主页:http://oott123.github.com/bpcs_uploader

嗯……只在cygwin和一台Centos上测试过,未在其它系统上通过测试。

系统要求

Linux (or cygwin) with php & curl installed.

使用方法

$ chmod +x bpcsuploader.php
$ ./bpcs
uploader.php

由于VPS上安装的php可能存在于各种地方,因此运行很可能不正常。请以使用which php得到你的php绝对路径,修改bpcs_uploader.php的头一句#!后的路径。
如果你的php是为了网站环境安装的,那么很有可能你会得到下面这条错误消息:

xxx() has been disabled for security reasons

那么说明你的环境由于安全原因禁止了部分函数的执行。请看FAQs的1。请使用那条长长的命令代替./bpcs_uploader.php。eg:php -d disable_functions -d safe_mode=Off -f bpcs_uploader.php quota

初始化

./bpcs_uploader.php init

敲下命令之后会进入初始化流程,这里分段详述设置方法。

Now start the initiation. If you have configured the uploader , it will be overwirte.
Continue? [y/N] y

确认初始化。如果之前有初始化过,那么以前的配置将会被覆盖。

Now you have to enter your baidu PSC app key . You should know that it needs a manual acting.
You can request for it via http://developer.baidu.com/dev#/create .
Make sure you have the PCS app key . if you haven\'t , you can use the demo key from Baidu.
It will exprire some time. who knows ? so the best way is to request for your own key.
There are a demo key from Baidu : L6g70tBRRIXLsY0Z3HwKqlRE So if you dont have the app secret , you have to re-init every month , for the access-token will expires every month.
App KEY [L6g70tBRRIXLsY0Z3HwKqlRE] :

第一步,输入App key。这里需要输入一个有PCS权限的API KEY,如果没有的话直接敲回车就好了,这里会默认使用百度提供的一个demo API KEY。不过,由于百度没有公开app secret,所以只能获取一个有效期为一个月的access token。如果有一个有PSC权限的API KEY和secret,那么就能获得一个有效期为10年的refresh token,以便长期使用。

App key has been setted to L6g70tBRRIXLsY0Z3HwKqlRE .
Now you have to enter your baidu PSC app secret. If you dont know the secret , keep it blank.
App SECRET [] :

第二步,输入App secret。如果输入了app secret,将会转到device code模式验证;或者直接输入回车使用oob模式验证。先直接回车:

Now you have to enter your app name. You can enter it later in the file [ /root/bpcsfiles/config/appname ].
* Why i have to enter app name ? see FAQs.
If your app name have Chinese characters , please swith your client to the UTF-8 mode.
Here are some chinese characters . Before you enter chinese characters , make sure you can read these characters.
如果你看到这里,说明你可以直接输入文字了。
If you cant read any chinese above , please press enter , and change it manually in the file [ /root/
bpcsfiles/config/appname ] .
If you have Enter the key [L6g70tBRRIXLsY0Z3HwKqlRE] (by default) , just press Enter.
App Name [pcstest_oauth] :

第三步,这里需要输入app name。详情见FAQ 2。因为是使用的默认的key,所以直接回车即可。

Now you have to get your oauth accesstoken by your own .
Here is a reference document .
http://developer.baidu.com/wiki/index.php?title=docs/pcs/guide/usage
example

A simple guide :
1.visit https://openapi.baidu.com/oauth/2.0/authorize?responsetype=token&clientid=L6g70tBRRIXLsY0Z3HwKqlRE&redirecturi=oob&scope=netdisk
in your broswer.
2.when it redirected to a html page , copy the url to the notepad.
3.get the access
token from it , paste it and press Enter.
access_token[] :

第四步,获取access token。在浏览器中打开上述URL( https://openapi.baidu.com/oauth/2.0/authorize?responsetype=token&clientid=L6g70tBRRIXLsY0Z3HwKqlRE&redirecturi=oob&scope=netdisk ),进行授权。
授权完毕后,将会跳到一个写着“百度 Oauth2.0”的页面。复制出其中的网页URL,找到access
token=和&之间的字符串,例如: 3.**05c2ea85d52c2***************a5.2592000.136***9032.3089166538-23**47
将其复制到shell中粘贴并回车。使用这种方式初始化的用户,需要每月重新初始化。

如果第三步输入app secret的时候没有留空,将会得到下面的消息:

Now open your broswer and visit https://openapi.baidu.com/device .
Copy or input 12abcxyz when it been asks.
After granted the access to the application , be back and press Enter key .

来到这里,打开浏览器访问 https://openapi.baidu.com/device ,在“请输入设备上显示的用户授权码:”文本框中输入上面显示的授权码(这里是12abcxyz),并点击继续。看到网页上显示“请返回设备继续操作!”后,返回ssh上按下回车后,即可继续。

curl -X GET -k -L "...."
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 62 0 62 0 0 40 0 --:--:-- 0:00:01 --:--:-- 235
Success . Your Storage Status : 0.06G/115.00G (0.05%)
Have fun !

你所看到的输出可能和这里给出的不一样,但是只要看到了存储空间的剩余量,和【Have fun !】提示,即说明成功初始化。

查询容量(配额)

./bpcs_uploader.php quota

结果:

Your Storage Status : 0.06G/115.00G (0.05%)

上传文件

./bpcs_uploader.php upload [path_local] [path_remote]
路径格式:foo/bar/file.ext(路径中一定要包括文件名)
上传后,能在百度网盘/我的应用数据/应用名/foo/bar下找到一个叫file.ext的文件。

下载文件

./bpcs_uploader.php download [path_local] [path_remote]

删除文件

./bpcs_uploader.php delete [path_remote]

离线下载

./bpcs_uploader.php fetch [path_remote] [path_to_fetch]
注:离线下载暂时无法在一般的api key授权的情况下使用,需要另外申请开通。

FAQs

  1. 各种错误提示
    试试php -d disable_functions -d safe_mode=Off -f bpcs_uploader.php
  2. 为什么要输入app name?
    因为百度PCS的权限被限制在了/apps/appname/下。如果发现输入app name后仍然无法上传文件,请通过网页版找到【我的应用数据】找到对应的文件夹名,写入/config/appname文件。上传文件的时候会自动帮您处理文件夹,无需手动写出完整路径。
本博客内容除标明外均为原创;转载请保留原文地址或pingback;所有代码所有权归作者所有;在此公布的所有作者标明为本人的代码均可非商业自由使用。
本博客文章已转移到独立博客,发表评论请点击做最好的三三查看全文。
Category: PHP | Tags: php 百度 百度网盘 | Read Count: 14814
wushirenfei3 说:
Feb 28, 2013 12:49:06 AM

你好,我现在在用PHP做PCS上传文件。看了你的帖子帮助很大,可遗憾的是我是PHP新手,还是有些问题没弄清楚。我参考了你的代码,写了一小段测试代码,放到虚拟主机上运行出现问题。想请你帮忙看看代码出错原因,可以吗?

Avatar_small
三三 说:
Feb 28, 2013 08:37:38 PM

0.0,好像已经用QQ处理掉了。

babytomas 说:
Mar 01, 2013 07:34:52 PM

如果开发一个BAE网盘的话就爽了、不是用云储存、用云环境,最近正在移植PHPDISK。。。各种问题啊 。。。

Avatar_small
三三 说:
Mar 01, 2013 09:05:38 PM

BAE不支持永久存储的呐。
不支持永久存储的意思就是,php写到本地的文件,会随时丢失。这个随时可能是写入后一分钟,也有可能是写入后几天,几个小时,也有可能是写入当时就挂掉了。
除非用BAE的云存储才能做到存储文件。那样的话,有现成的API,比pcs还方便,很简单的。
不过用云环境和用云存储有什么很大的区别呢。都是要计费的说。云存储的费用相对还要便宜一些。

exexue 说:
Mar 02, 2013 11:50:11 AM

你是传说中的大神,牛人,求拜师。。。。。。。

exexue 说:
Mar 02, 2013 11:50:51 AM

老大。 你可以收我嘛?

babytomas 说:
Mar 02, 2013 04:55:47 PM

话说用到一个什么参数可以不必这样

babytomas 说:
Mar 02, 2013 04:56:36 PM

你是说我还是说OOTT123?

Avatar_small
三三 说:
Mar 02, 2013 09:15:31 PM

用到一个参数?不会啊。我有仔细看过BAE的文档,明确说了不能永久存储的啊。

Avatar_small
三三 说:
Mar 02, 2013 09:15:51 PM

你是说我还是说tomas?

babytomas 说:
Mar 02, 2013 09:19:46 PM

默认永久缓存啊 。。。难道我看错了 。。。不可能啊 。。云环境WEB应用默认永久缓存

babytomas 说:
Mar 02, 2013 09:20:27 PM

哇哈哈~你猜他说的谁~

Avatar_small
三三 说:
Mar 02, 2013 10:22:05 PM

这是一条有点长的回复。
因为版面问题,习惯性贴到了gist上,点击查看-v-。
https://gist.github.com/oott123/5071200

exexue 说:
Mar 03, 2013 11:04:26 AM

我说的是你,不是他。老大,收我不。

babytomas 说:
Mar 03, 2013 12:50:56 PM

我觉得是你 。。。

babytomas 说:
Mar 03, 2013 12:51:38 PM

说名字额 。。你这里看不到你在说谁 。。

exexue 说:
Mar 03, 2013 12:53:19 PM

好吧。oott123.is-programmer.com的站长。我要做他徒弟、

exexue 说:
Mar 03, 2013 12:53:43 PM

当然我也愿意当你徒弟

ivmm 说:
Mar 03, 2013 01:53:11 PM

呃。。。。
邱子健才是牛人啊

babytomas 说:
Mar 03, 2013 05:07:25 PM

一个年轻的主机商、并且本事不错,在你上面的那个孩纸[ivmm]是这么认为的

babytomas 说:
Mar 03, 2013 05:08:34 PM

其实多多看一些教程从基础开始入门的话,这些是没有问题的~让别人找你做师傅~

Avatar_small
三三 说:
Mar 03, 2013 09:07:08 PM

师傅什么的不敢当。我也是个小菜鸟而已啦~
像小蒋(babytomas)说的那样~自己多钻研,就能做别人的师傅了啦

babytomas 说:
Mar 03, 2013 09:16:50 PM

其实我们这些经常混的都不是专业编程的、专业编程的一般不出来逛 。。。

babytomas 说:
Mar 03, 2013 09:17:11 PM

我还是崇拜国外的开发者~

exexue 说:
Mar 04, 2013 01:51:11 PM

哎。空间很多,域名也很多,网站也建设了很多,就是一毛钱也没有赚到。求网赚神人呀。

babytomas 说:
Mar 04, 2013 05:32:53 PM

网赚其实也不难,需要耐心和技术

exexue 说:
Mar 04, 2013 06:59:41 PM

求拜师,学习网赚技术。

oott123 说:
Mar 05, 2013 07:16:49 AM

网赚就不懂了。我从来不在网站上挂广告,也从来不做什么会员收费一类的系统。建站是个人爱好,我愿意为爱好付出一定的时间和金钱。
要赚钱,做做项目或者去做兼职都好。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com

Power by Chito 1.3.1 beta

| Theme: Aeros 2.0 by TheBuckmaker.com