上传一个媒体目录(pics/videos)到flickr,在网上展示你的pics,并作为本地存储的备份。Flickr Uploader最初是为滑膜设备设计的。也适用于Linux、Mac和Windows系统。

flickr-uploader的Python项目详细描述


Flickr上载程序


Opromessa,2017年,v2.8.6主构建状态coverage status

  • 发布时间:https://github.com/opromessa/flickr-uploader/" rel="nofollow">https://github.com/opromessa/flickr uploader/

说明


  • 上传一个媒体目录(pics/videos)到flickr展示你的图片 作为本地存储的备份。
  • 检查功能、要求和设置备注。
  • Flickr Uploader最初是为滑膜设备设计的。
    • 也适用于Linux、Mac和Windows系统。

PYPI下载统计数据(截至2018年9月)


<表><广告>版本 系统名称 百分比下载计数< /广告><正文>2.8.6Linux71.70%382.8.6达尔文13.21%72.8.7a1Linux7.55%42.8.6窗口5.66%32.8.6A9Linux1.89%1

功能


  • 上载图像和电影(jpg、png、gif、avi、mov、3gp文件)
    • 个人我避免使用不支持exif信息的png文件
  • 可并行加载多个负载(check-p选项)
  • 使用简单的sqlite数据库在本地存储图像信息
  • 根据媒体所在的文件夹名创建Flickr"集"(相册) (从flickr获取现有集也可以管理)
  • 忽略不需要的目录(如picasa用户的".picasabackup")或 "@eadir"用于Synology NAS用户),您可以轻松添加/配置更多 你自己。检查uploadr.ini配置文件。
  • 允许忽略特定文件(通过正则表达式)
  • 跳过超过可配置大小的文件(flickr的最大大小约为900MB)
  • 重新上传修改过的图片和视频(通过删除/上传)。
  • 从您的 本地硬盘
  • 可以选择转换原始文件(使用外部工具:exiftool by phil harvey)。

此脚本不提供任何保证。 请检查源代码以确保它能满足您的需要。 如果发现错误,请报告。

工作原理!一个例子…

示例文件结构

考虑这个例子来解释如何将文件上传到flickr上的集合/相册中。

如果您有以下文件夹和图片(flickr集/相册的名称取决于uploadr.ini文件设置的完整集名称,但我通常将其用作false):

/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg

用文件目录设置源文件夹

然后设置文件目录

FILES_DIR=/home/user/media

根据设置全名的方式,您应该获得以下信息:

<表><广告>文件路径名集合/相册名称(全集名称=false)集合/相册名称(全集名称=真)< PIC备注 < /广告> 肺结核艾迪>/home/user/media/pic00.jpg媒体 >pic00/home/user/media/album1/pic01.jpg相册1相册1pic01/home/user/media/album2/pic02.jpg相册2相册2pic02/home/user/media/album3/pic03.jpg相册3相册3图片03/home/user/media/folder/album4/pic04.jpg相册4文件夹/相册4pic04/home/user/media/folder/album4/sub/pic041.jpg子< /TD>文件夹/相册4/子文件夹pic041/home/user/media/newfolder/album4/pic042.jpg相册4新文件夹/相册4pic042/home/user/media/album5/pic01.jpg相册5相册5pic01与Album01中相同的图片加载两次,因为它是不同专辑的一部分/home/user/media/album5/sub/pic051.jpg子< /TD>专辑5/Subpic051如果full_set_name=false,它将进入专辑"sub"

要求


  • Python2.7+(应该可以在Synology(V6.1)、Windows和Mac上使用DSM)
  • 也兼容Python3.6和3.7
  • 关于概要DSM的建议:不要安装/使用DSM包中的"python模块"。
  • flicrkapi模块。可能需要安装get-pip.py。(使用说明 下面的概要DSM。)
  • 用于Windows系统的PortalLocker模块。对滑膜学来说不是强制性的。
  • 文件写入访问(用于令牌和本地数据库)
  • Flickr API密钥(免费)
  • exiftool,仅当您要将原始文件转换为jpg时。此处有安装说明。。注意:您还需要安装dsm包perl。

概要设置


  • 可能也适用于其他平台,如Windows。
  • 旁注:不要被这个设置所淹没。前进的步伐相当狭窄。
  • 总结步骤:
  1. 启用对Synology DSM服务器的ssh访问。(可选)安装Python3。
  2. 为python模块安装准备本地文件夹位置
  3. 下载并安装pip
  4. 下载并安装FlickRapi
  5. 下载并安装Flickr Uploader
  6. < > >

    1.启用对Synology DSM服务器的ssh访问。(可选)安装python 3。

    • 使用管理员用户通过ssh启用和访问您的Synology DSM。
    • 出于安全原因,请避免使用root。
    • (可选)通过Synology DSM包安装"Python 3"包(对应于版本3.5)
    <H3>2。为安装python模块准备一个本地文件夹位置。

  • 重要提示:避免弄乱系统文件。
  • 创建本地安装目标目录/文件夹定义并导出pythonpath变量(例如:对于python 2.7):
$ cd
$ mkdir apps
$ mkdir apps/Python
$ exportPYTHONPATH=~/apps/Python/lib/python2.7/site-packages
  • 或者,对于python 3.5:
$ exportPYTHONPATH=~/apps/Python/lib/python3.5/site-packages
  • 创建一个dev目录/文件夹,用作安装前下载/提取文件/包的工作区:
$ cd
$ mkdir dev
dev$ cd dev
<H3>3。下载并安装pip
  • 重要提示:pip允许您更轻松地安装与python相关的模块/应用程序。
  • 下载获取pip.py
  • 提取到~/dev
  • 然后通过运行python get-pip.py--prefix=~/apps/python来安装
  • 遵循pip安装指南
  • 重要提示:请确保使用--prefix参数
$ cd
$ cd dev
dev$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1603k  100 1603k    00  3828k      0 --:--:-- --:--:-- --:--:-- 3827k
dev$ python get-pip.py --prefix=~/apps/Python
Collecting pip
    Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)100%  1.3MB 495kB/s
Collecting setuptools
    Downloading setuptools-36.6.0-py2.py3-none-any.whl (481kB)100%  481kB 1.3MB/s
Collecting wheel
    Downloading wheel-0.30.0-py2.py3-none-any.whl (49kB)100%  51kB 4.1MB/s
Installing collected packages: pip, setuptools, wheel
    Successfully installed pip setuptools wheel
<H3>4。下载并安装FlickRapi(2.4.0)

4.1选项1(推荐):带PIP(i按上述步骤3安装)

$ cd
$ cd dev
dev$ exportPYTHONPATH=~/apps/Python/lib/python2.7/site-packages
dev$ pip install flickrapi --prefix=~/apps/Python

4.2选项2:人工操作
$ cd dev
dev$ wget https://files.pythonhosted.org/packages/b1/f1/d10fa0872e4f781c2ed47e94e728ecd3c1998f8c8d12e78c7329a25d0727/flickrapi-2.4.0.tar.gz
dev$ tar tzvf flickrapi-2.4.0.tar.gz
flickrapi-2.4.0/
flickrapi-2.4.0/CHANGELOG.md
flickrapi-2.4.0/MANIFEST.in
flickrapi-2.4.0/.coveragerc
flickrapi-2.4.0/LICENSE.txt
flickrapi-2.4.0/tox.ini
flickrapi-2.4.0/README.md
(...)
dev$ cd flickrapi-2.4.0
dev/flickrapi-2.4.0$ python setup.py install --prefix=~/apps/Python
python setup.py install --prefix=~/apps/Python
running install
running bdist_egg
running egg_info
writing requirements to flickrapi.egg-info/requires.txt
writing flickrapi.egg-info/PKG-INFO
(...)
zip_safe flag not set; analyzing archive contents...
Moving chardet-3.0.4-py2.7.egg to /xxx/xxx/xxx/apps/Python/lib/python2.7/site-packages
Adding chardet 3.0.4 to easy-install.pth file
Installing chardetect script to /xxx/xxx/xxx/apps/Python/bin

Installed /xxxx/xxx/xxx/apps/Python/lib/python3.5/site-packages/certifi-2018.4.16-py3.5.egg
Finished processing dependencies forflickrapi==2.4.0
<H3>5。下载并安装Flickr Uploader

5.1选项1(推荐):带PIP(安装在上述步骤3中)

  • 现在可以在pypi.org上通过pip进行安装。
$ cd
$ cd dev
dev$ exportPYTHONPATH=~/apps/Python/lib/python2.7/site-packages
dev$ pip install flickr-uploader --prefix=~/apps/Python
  • 安装程序还会将数据文件uploader.iniuploader.cron

5.2选项2:手动从本地文件夹运行
  • 从github手动下载flickr uploader/releases/latest rel="nofollow">flickr uploader/releases/latest
  • 您可以在资产下找到:
    • 源代码包;
    • 一个发行包,发布于https://github.com/opromessa/flickr-uploader/releases/latest" rel="nofollow">https://github.com/opromessa/flickr uploader/releases/latest
  • 提取所选tar文件的内容。
    • 然后您可以从当前文件夹运行它。
    • 根据需要编辑uploader.ini(检查配置部分)
/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg
0

5.3选项3:手动从~/apps/python/bin运行
  • 从github手动下载flickr uploader/releases/latest rel="nofollow">flickr uploader/releases/latest
  • 您可以在资产下找到:
    • 源代码包;
    • 一个发行包,发布于https://github.com/opromessa/flickr-uploader/releases/latest" rel="nofollow">https://github.com/opromessa/flickr uploader/releases/latest
  • 提取所选tar文件的内容。
    • 然后您可以从当前文件夹运行它。
    • 根据需要编辑uploader.ini(检查配置部分)
/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg
1
  • 安装程序还会将数据文件uploader.iniuploader.cron

配置


转到http://www.flickr.com/services/apps/create/apply" rel="nofollow">http://www.flickr.com/services/apps/create/apply并申请API 密钥,

  • 在uploader.ini中编辑以下变量
/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg
2

请参阅https://www.flickr.com/services/api/upload.api.html" rel="nofollow">https://www.flickr.com/services/api/upload.api.html 上面的upload参数中的一个对应于flickr的api。

  • 在运行uploader.py之前,请确保运行以下命令:
    • 若要在登录系统时避免运行此命令,请按照此链接上的说明来编辑文件~/.bashrc并将此命令放在那里。
/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg
3
  • 在第一次运行时,您需要根据flickr对应用程序进行身份验证。
    • 使用-a选项
    • uploader.py将为您提供一个需要运行的url/链接
/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg
4
  • 以下运行可以在无人值守的情况下启动:
/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg
5

用法/参数/选项


将文件uploader.py放在任何目录中,并通过ssh运行 (需要执行权限)。 它将爬过文件目录中的所有文件并开始 上传过程。

/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg
6

要检查uploader.py将上载和删除哪些文件,可以运行 带选项的脚本--dry run

/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg
7

运行/uploader.py--help获取有关参数的最新信息:

/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg
8

任务调度程序(cron)


在Synology系统上,使用任务调度程序(Synology/Control Panel)运行

在基于linux/unix/mac的系统上,通过crontab运行
  • 使用添加到分发版中的upload.cron并根据您的需要进行调整。
  • 根据您的系统使用"crontab-e"或vi/etc/crontab。
/home/user/media/pic00.jpg
/home/user/media/Album1/pic01.jpg
/home/user/media/Album2/pic02.jpg
/home/user/media/Album3/pic03.jpg
/home/user/media/folder/Album4/pic04.jpg
/home/user/media/folder/Album4/Sub/pic041.jpg
/home/user/media/newfolder/Album4/pic042.jpg
/home/user/media/folderAlbum5/pic01.jpg
/home/user/media/folderAlbum5/Sub/pic051.jpg
9

在后台程序模式下从命令行启动(-d选项)。

  • 建议使用任务调度程序或cron。
  • 使用-d选项,它在后台程序模式下运行,并在每一个睡眠时间秒(在uploader.ini上配置)检查文件
  • 它只是加载文件。它不创建相册/集。
  • 睡眠时间仅在这种情况下使用。
FILES_DIR=/home/user/media
0

识别


灵感来源:

动态使用以下库:

最后备注


您可以使用此代码,但您认为适合任何形式。 享受吧!!!!

问题和答案


  • 问:这个剧本是为谁设计的?

    • 那些熟悉命令行的人希望在Flickr上以全分辨率备份他们的媒体。
  • 问:为什么不使用oauth?

      我做!截至2017年11月
  • 问:你是蟒蛇忍者吗?

    • 不,对不起。我刚学会编写这个脚本的语言,因为python可以很容易地安装在synology磁盘站上。
  • 问:这个脚本功能是否完整并经过全面测试?

      Nope .这是一项正在进行的工作。我已经根据自己的需要对它进行了测试,但可以通过参与脚本来构建其他功能。
    • 有一些星星和反馈,它正在被几个人使用。
  • 问:我需要从DSM安装包中安装"python模块"吗?

      <> >< /LI>
    • 安装Synology的标准开箱即用的Python2.7(在编写本文时,最高达DSM6.2A的版本上)已经足够了。
    • 事实上,在我收到的一份报告中,这个软件包引起了一些冲突,请不要安装它。
  • 问:如何通过一个"天气学NAS"实现自动化?

    • 首先,您需要在ssh客户机中至少运行一次脚本以获取令牌文件。 请参阅上面的"任务调度程序(cron)"部分。 然后使用DSM 6.1,创建一个自动化任务,例如,让它每天运行一次,并将其放入文本框中,不带引号"path_to_your_python_program path_to_your_script"。例如,假设您安装了python包from synocommunity,命令应该类似于"/usr/local/python/bin/python/volume1/script/flickr uploader/uploader.py"。
  • 问:如果我有不同的文件夹要同步怎么办?

    • 标准的操作模式应该是始终将相同的主文件夹结构与所有子文件夹/图片同步。
    • 每次运行时同步不同的文件夹确实可以工作并上载新的图片;但是uploader最初不是为此而设计的。
      • 以前加载的pic发生什么情况取决于它们是否仍然存在,上载程序仍然可以找到它们(取决于files_dir是否设置为绝对文件夹或相对文件夹路径)
        • 要上载的文件:/home/user/media/2014/05/05/photo.jpg
        • 全名:
          • 错误:05
          • 正确:2014/05/05
    • uploader为加载的pic保存(完整的或相对的,取决于文件目录)路径名。因此,即使您提供了一个新的原始文件夹,如果先前加载的图片仍然存在于其原始位置,则不会删除它们。如果从原始位置删除或上载程序无法访问它们,则它们将从Flickr中删除。
    • 如果使用相对文件目录且同一子文件夹中存在两个文件,则不会重新上载。
    • 所以,简而言之,如果你想改变文件目录的位置,会遇到太多问题。
  • 问:"我的理解是这是一个同步脚本,这意味着当我稍后从同步文件夹中删除一张图片时,它将从flickr中删除"

    • 是的,本地删除的文件将从Flickr中删除。
    • 备注:我假设在每次运行之间,您保留flickrdb控件数据库的内容,而不删除它。
  • 问:"以前存在的文件夹(似乎没有被删除)怎么样?"

    • 如果文件夹中的所有文件(以及flickr上相应的相册)都被删除,那么实际的相册也将被删除。同样,如果不在两次运行之间更改文件目录。
  • 问:当我同步一个与以前存在的文件夹同名的文件夹时,会怎样?(你提到 从flickr获取现有集也受到管理

      < hmmm. >如果你的意思是"同步文件夹"通过设置文件目录…这将取决于是否对文件目录使用完整或相对路径名。检查上面的"澄清"部分。它将删除他在本地找不到的文件。 hmmm. .如果您指的是两个子文件夹同名,则将添加到哪个集合/相册取决于设置的完整集合名称。检查上面的"说明"部分,例如pic042。
  • 问:如果我在~/pictures/parent_folder/folder_a上运行脚本,然后在~/pictures/parentfolder上运行脚本,脚本会将parentfolder中的文件夹重新设置为它之前上载的文件夹,因为它的内容将有匹配的校验和?

    • 同样,它取决于full_set_name设置和file_dir是绝对路径或相对路径,并且匹配最初由full pathname+filename完成。因此,在您的示例中~/pictures将扩展到完整路径,这样它将识别相同的文件,而不会再次上载它们。
  • 问:我想我读过一篇关于校验和检测文件修改的文章:同一个文件放在两个不同的文件夹中怎么样,是每次(在一个文件夹名的集合中)更新还是只更新一次?

    • 两个文件夹中的同一个文件加载两次。使用album5/pic02.jpg查看上面的示例
  • 问:如何阅读最终报告:

    • 初始找到的文件:找到要处理的文件数。
      • 错误文件:
        • 由于flickr错误5("无法识别类型")或8("文件到大文件")而无法加载的文件
        • 检查"-b"和"-c"选项的说明。
        • "一些坏文件可能已经不存在了!"表示以前记录的错误文件可能已经从t中删除本地文件系统。检查"-c"选项的可能用法。
    • 照片计数:
      • 本地:找到的本地图片数。
      • flickr:flickr指示的图片数(由于flickr refres的原因,上传后可能会立即关闭1个图片)
      • flickr local:flickr与本地图片的区别(便于阅读/跟踪)
      • 不在flickr上的集合中:仅表示此。如果大于0,则可能指示错误,因为上载程序上载的所有图片都应位于相册中。我通常的做法是直接从flickr/organize界面从flickr中删除这些图片。但我也看到其他有其他工具的用户将图片上传到flickr,忽略这个号码。
FILES_DIR=/home/user/media
1
  • 问:如果删除了本地控制数据库(flickrdb),会发生什么情况?

    • 通过重新运行不带-u opiotn的程序,它将遍历本地文件,检查/搜索已加载的具有相同校验和+集的图片,并重新构建本地数据库。
  • 问:所有敏感信息(相册和文件名)是否都用-u选项屏蔽?

    • 请注意,掩蔽选项不会过滤所有敏感信息。尤其是在设置调试错误级别时。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Tomcat SSL错误   线程“main”java中的indexoutofboundsexception错误异常。lang.ArrayIndexOutOfBoundsException:0   java如何模拟@InjectMocks类的方法?   当在过滤器后单击时,带有搜索和onclick的java Listview没有获得正确的位置   java如何处理多个文件和消息以在春季实现国际化?   java MINA 2.0.7有时无法在会话关闭时发出通知   java与WindowsBuilderPro的配合使用   java为什么会出现“无法解析为类型”错误?   java Eclipse调试器在包行停止   关于BuffereImage和Image的java问题   java XML工具上下文错误   java有没有一种方法可以在不创建单独的子数据集的情况下对数据集进行分区并访问分区?   java创建异常类;从其他类别看不见   java必须根据应用程序的启动方式使用skip()或read()   java Hibernate特定条件查询