2019年2月1日

以手機進行定點攝影(2)-電腦下載手機裡的定點照片

前篇設定了手機的app,讓手機可以定點攝影,不過光只有拍照總是還是下載回來處理。可能有人會想,那就把手機拿下來接到電腦下載不就好了,或是在手機端再用無線服務傳輸不就好了。但是我想啊,最好的定點攝影情況就是一切都程式設計好了,讓它自己執行就好,省去自己去處理或是拿下手機。如果還要自己每天動手去做,那最後只會懶得做啦,而拿下手機,則不同日期的照片可能就會有位置偏差,如果後來要做什麼處理的話,就會對不上啊。

為此,我就在電腦上用python寫了程式,並用crontab定時執行這支程式。其實程式只有列出一半,另外一半則是會在別篇寫。

程式要做的就是用ftp連上手機,只下載特定時間範圍內的照片(5點到19點),因為其他時間天空都是暗的,下載也沒用。而檢視照片時間的方式則是用檔名去觀察,因為手機App的OpenCamera在拍照時,是直接以拍照時間作為檔名。

最後,無論是否是在特定時間範圍內,所有手機上的照片都會被這支程式刪除,這是為了騰出手機的空間,否則連續拍照幾天後,手機空間就會滿了。


import subprocess
import datetime
import os

path = "/home/shawn-pc/桌面/SkyAndsatellite/"
if not os.path.isdir(path):  #檢查資料夾是否存在
    os.mkdir(path)

#從手機下載照片
from ftplib import FTP
HOST = "192.168.1.116"
PORT = 2221
pathFtp = "/opencamera"

ftp = FTP()
ftp.connect(HOST, PORT)
ftp.login()
ftp.cwd(pathFtp)
filenames = ftp.nlst()
for filename in filenames:
    if int(filename[13:15]) >=5 and int(filename[13:15]) <= 19:  #下載在5點到19點的照片
        dateFolder = filename[4:12]
        if not os.path.isdir(path + dateFolder+"/"):  #檢查日期資料夾是否存在
            os.mkdir(path + dateFolder+"/")

        if not os.path.isdir(path + dateFolder+"/"+"sky/"):  #檢查日期資料夾裡的sky資料夾是否存在
            os.mkdir(path + dateFolder+"/"+"sky/")


        local_filename = os.path.join(path + dateFolder+"/"+"sky/", filename)
        file = open(local_filename, 'wb')
        ftp.retrbinary('RETR '+ filename, file.write)
        print("download "+filename)
    
    file.close()
    ftp.delete(filename)

ftp.quit()