Tôi có nhu cầu upload hình lên flickr.com bằng một script chạy trên RPi.
Có mấy loại công việc:
- Upload lần đầu tất cả các file và thư mục con trong thư mục ảnh
- Upload các file và thư mục vừa mới cập nhật trong thư mục ảnh
Ngoài ra, cần yếu tố kỹ thuật là upload theo nhiều luồng song song hay theo nhiều core để tăng tốc độ.
Tuy nhiên, vì flickr.com vừa thay đổi API nên hầu hết các script đã có trên internet đều không chạy được. Chúng ta sẽ sử dụng thư viện Python flickrapi để phát triễn ứng dụng.
A. Trước hết, chúng ta sử dụng một script Python đơn giản vốn dùng để upload các file ảnh từ một NAS Synology, tuy nhiên vẫn có thể chạy trên RPi. Các bước như sau:
1. Tạo thư mục chứa flickr api
mkdir /mnt/flickrApi
2. Chỉ định python 2.7 sử dụng thư viện trong thư mục đó, qua 4 câu lệnh sau
echo "export PYTHONPATH=/mnt/flickrApi" >> ~/.bashrc echo "export PYTHONPATH=/mnt/flickrApi" >> ~/.bashrc source ~/.bashrc source ~/.profile
3. Install flickr api
easy_install --install-dir=/mnt/flickrApi flickrapi
4. Tải về file script (dùng lệnh wget)
wget https://raw.githubusercontent.com/alfem/synology-flickr-folder-uploader/master/flickr-folder-uploader.py
5. Cho file .py thuộc tính thực thi
chmod u+x flickr-folder-uploader.py
6. Tạo một ứng dụng tại tài khoản Flickr của bạn qua dòng lệnh
https://www.flickr.com/services/apps/create/apply
sau đó nhận được api_key và api_secret
7. Sửa đổi api_key, api_secreet và đường dẫn chứa token ở phần đầu file flickr-folder-uploader.py
8. Chạy file flickr-folder-uploader.py theo cú pháp
flickr-folder-uploader.py thư_mục_ảnh
Script này chạy qua giao diện dòng lệnh, upload mỗi lần một thư mục.
B. Chúng ta sẽ sửa đổi script trên một chút và đổi tên thành flickrUp.py. Các ưu điểm được cải tiến như sau:
- Script quét qua thư mục chỉ định, kể cả file và thư mục con các cấp để upload lên Flickr
- Mỗi tên thư mục sẽ là tên của Album chứa các hình trong thư mục đó
- Không cần chỉ định nơi chứa token
Tải file flickrUp.txt về theo link trên và đổi tên thành flickrUp.py, cho nó thuộc tính thực thi và chạy trên RPi theo cú pháp:
flickrUp.py photo_folder
Yêu cầu 1 đã được giải quyết. Tuy nhiên:
- Ảnh được upload tuần tự, chiếm nhiều thời gian dù có thể đặt cronjob cho chạy qua đêm.
- Nếu việc upload bị ngắt (phần lớn nguyên nhân từ flickr.com), việc upload phải lặp lại từ đầu khiến có nhiều file ảnh giống nhau và tạo ra nhiều album cùng tên trên flickr.com (lãng phí tài nguyên)
Cần sửa lại một chút để có thể dùng lệnh parallel, ảnh được upload không được trùng lặp.