Skip to main content

A simple API to interact with baidu-photo

Project description

pybaiduphoto

一刻相册 API

(请有PR的同学方向指向develop分支。有指向master的PR请提前联系讨论一下。也希望有人参与一下下面的Contribution requests

安装

pip install pybaiduphoto

初始化api

from pybaiduphoto import API
api = API(cookies=cookies)

其中cookies 从网页中抠取,如下:

cookies = {
            'BAIDUID': 'F...',
            '__yjs_duid': '1...',
            'BIDUPSID': 'FD...',
            'BDUSS_BFESS': 'lRLNl...',
            'STOKEN': 'be2...',
            ...
        }

方便起见,也可以通过browser_cookie3(注意自己pip安装一下)直接从浏览器中抽取cookies(注意先登陆),以chrome为例:

from pybaiduphoto import API
import browser_cookie3

api = API(cookies = browser_cookie3.chrome() )

获取对象

数据对象

数据对象是指图片或者视频。首先要得到对象的列表信息。因为量比较大,所以信息是分页的。获取第一页的方式如下:

list1 = api.get_SinglePage()

其返回值包含以下内容:

list1.keys()
>>
dict_keys(['items', 'has_more', 'cursor'])

items 是该分页中的对象集合,是一个list。可以直接通过.info查看对象的信息:

L=list1["items"]
L[0].info

>>
{'fsid': 63.....,
 'path': '.....',
 'md5': '49dda......',
  ...
 'collect_status': 0}

对象可以直接下载到本地目录:

L=list1["items"]
L[0].download(DirPath='/Users/XXXX/Desktop')

通过has_more来判断该页面是否为最后一页。如果不是最后一页,下一页的获得方式为:

if list1['has_more']:
    cursor_nextpage = list1['cursor']
    list2 = api.get_SinglePage(cursor=cursor_nextpage)

可以删除:

L[0].delete()

相册对象

list1 = api.getAlbumList()
list1.keys()
>>
dict_keys(['items', 'has_more', 'cursor'])

其中has_more, cursor意义上同。items中的对象是相册对象。可以用过append将图片添加到相册。例子: 将最后一张照片添加到第一个相册:

ilist = api.get_SinglePage()
alist = api.getAlbumList()
a = alist['items'][0]
a.append( ilist['items'][0]  )

也可以添加多个对象,a.append( ilist['items'][0:3] )

可以删除该相册:a.delete(),默认会删除相册中的子内容。如果只删除相册但是保留子内容,可使用: a.delete(isWithItems=False)

获得相册中的所有对象:

res = a.get_OnlineItems()
res.keys()
>>
dict_keys(['items', 'has_more', 'cursor'])

看key大约就知道怎么用了吧?其中items是一个list,内容是上面讲的数据对象

上传文件

api.upload_1file(filePath='/Users/XXXX/Desktop/test.png')

创建相册

创建一个名字为test的相册:

a = api.createNewAlbum(Name='test')

返回的是相册对象(见上面解释)。!!!注意,可以创建名字相同的相册。另外,此处后台来看会用到一个tid的信息,来唯一标识一个相册。我不知道这个是怎么生成的,目前用一个18位的随机数来代替测试可行。但这带来一个未来失效的风险。有聪明的同学可以帮我研究研究这个tid从哪里来的。

网络代理

在初始化对象的时候加入proxies字段,例如 api = API(cookies = browser_cookie3.chrome() , proxies = {"https":"socks5://127.0.0.1:1080"} )proxies的格式同requests库需求一致。

批量下载

通过url = api.get_batchDownloadLink(items,zipname=None)可以获得一个下载地址,复制到浏览器回车可以下载一个zip包。这其中items是一个标准的Python list,内容是数据对象。注意如果要用参数zipname的话,后缀名要加上.zip,不然报错。

Contribution requests

  • 批量下载,遇到一些困难,有js比较好的同学可以去issue帮着看看。(感谢@foxxorcat)
  • 请个厉害的同学做一个带进度条的下载器:issues
  • 请个厉害的同学重新做个花里胡哨文档放到的README2.md中,内容跟这里差不多,希望看起来是个像样的文档,直接pr到master

总结

虽然只在mac上测试了一下,但是应该其他系统也能用。大致看起来能跑通,基本功能可以实现。有各种问题的话再慢慢研究修复。

免责申明

此脚本(API)仅供学习交流,禁止商业使用。使用软件过程中,发生意外造成的损失由使用者承担。您必须在下载后的24小时内从计算机或其他各种设备中完全删除本项目所有内容。您使用或者复制了以上的任何内容,则视为已接受此声明,请仔细阅读。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pybaiduphoto-2022.5.14.723.tar.gz (13.1 kB view details)

Uploaded Source

File details

Details for the file pybaiduphoto-2022.5.14.723.tar.gz.

File metadata

  • Download URL: pybaiduphoto-2022.5.14.723.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/29.0 requests/2.25.1 requests-toolbelt/0.9.1 urllib3/1.26.2 tqdm/4.59.0 importlib-metadata/3.7.2 keyring/23.0.0 rfc3986/1.4.0 colorama/0.4.1 CPython/3.8.7

File hashes

Hashes for pybaiduphoto-2022.5.14.723.tar.gz
Algorithm Hash digest
SHA256 b76c5a7a90c8c7433ca600ae26b3a5263b0365db21c60cf61a036e0788749b73
MD5 d428e8e362dd8615fe659ecddfc128f7
BLAKE2b-256 44a597a9cace112c129202434119d754dd7b4d2339fb167f90a58f1088a31e5b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page