piwigo/exif.py
2019-03-15 22:39:29 +09:00

196 lines
5.2 KiB
Python

#!/usr/bin/env python3.7
# -*- coding: utf-8 -*-
import os
import exifread
import datetime
import sys
from piwigo import *
from calendar import monthrange
import tinytag
sys.stdout.reconfigure(encoding='utf-8')
sys.stdin.reconfigure(encoding='utf-8')
exif_choice = "EXIF DateTimeOriginal"
mySite = Piwigo('https://pho.flywithu.com/')
mySite.pwg.session.login(username="flywithu", password="1q2w3e4r5t")
#aaa=mySite.pwg.categories.add(name="zaza")
#print(aaa['id'])
#exit()
categories=mySite.pwg.categories.getList(recursive="true")['categories']
categoryidnames = []
for category in categories:
# print (category['id_uppercat'])
categoryidname={'id':category['id'] , 'name':category['name'], 'id_uppercat':category['id_uppercat']}
categoryidnames.append(categoryidname)
#print(categoryidnames)
def getcategoryfromid(id):
for cat in categoryidnames:
# print(cat['id'])
if int(cat['id']) ==int(id):
return cat['name']
return id
#print("NAME::::::::"+str(getcategoryfromid(2930)))
#:wqexit()
#print(categoryidnames)
findcategorys = []
for category in categories:
if category['id_uppercat'] is None:
findcategory={'id':category['id'], 'name':category['name']}
findcategorys.append(findcategory)
#print (findcategorys)
elif (len(category['uppercats'].split(','))) is 2:
id_upper=category['id_uppercat']
findcategory={'id':category['id'], 'name':getcategoryfromid(id_upper)+"/"+category['name']}
findcategorys.append(findcategory)
elif (len(category['uppercats'].split(','))) is 3:
id_upper=category['id_uppercat']
id_upper2=""
for category2 in categories:
# print(str(category2['id'])+":"+id_upper)
if str(category2['id']) == id_upper:
id_upper2=category2['id_uppercat']
break
findcategory={'id':category['id'], 'name':getcategoryfromid(id_upper2)+"/"+getcategoryfromid(id_upper)+"/"+category['name']}
findcategorys.append(findcategory)
# print (category['name'])
def getidbyname(year):
global findcategorys
name=year
for findcat in findcategorys:
# print(findcat)
if findcat['name'] == name:
return findcat['id']
newid=mySite.pwg.categories.add(name=year,status="private")
findcategory={'id':newid['id'], 'name':name}
findcategorys.append(findcategory)
return newid['id']
def getidbyname2(year,month):
global findcategorys
name=year+"/"+month
for findcat in findcategorys:
# print(findcat)
if findcat['name'] == name:
return findcat['id']
yearid=getidbyname(year)
# print("YEARID:::"+str(yearid))
newid=mySite.pwg.categories.add(name=month,parent=int(yearid),status="private")
findcategory={'id':newid['id'], 'name':name}
findcategorys.append(findcategory)
return newid['id']
def getidbyname3(year,month,day):
global findcategorys
name=year+"/"+month+"/"+day
for findcat in findcategorys:
# print(findcat)
if findcat['name'] == name:
return findcat['id']
monthid=getidbyname2(year,month)
# print("Monthid:::"+str(monthid))
newid=mySite.pwg.categories.add(name=day,parent=int(monthid),status="private")
findcategory={'id':newid['id'], 'name':name}
findcategorys.append(findcategory)
return newid['id']
#print(str(getidbyname3("2017","05","1_59")))
#print(str(getidbyname3("2017","05","1_59")))
#print(str(getidbyname3("2017","05","1_59")))
#exit()
def files(path):
for file in os.listdir(path):
if os.path.isfile(os.path.join(path, file)):
yield file
folder = "./data/"
filenames = os.listdir(folder)
testfiles = [ x for x in filenames if os.path.isfile(os.path.join(folder,x)) == True ]
#print (testfiles)
#exit()
#def print_all_metadata_atoms(file):
# atoms = file.findall('.//data')
# for atom in atoms:
# data = atom.get_attribute('data')
# print (atom.parent.name, data)
#for filename in filenames:
for filename in testfiles:
# newfilename = filename.encode('utf-8')
targetname,targetext = os.path.splitext(filename)
pathfile = folder+filename
f2 = "./done/"+filename
f = open(pathfile,'rb')
if targetext == ".mp4":
print (".mp4")
# print_all_metadata_atoms(Mp4File(pathfile))
# exit()
else:
tags = exifread.process_file(f, stop_tag=exif_choice)
# print (pathfile)
for tag in tags.keys():
if tag in (exif_choice):
photodatetime=tags[tag]
T=datetime.datetime.strptime(str(photodatetime)[0:10],'%Y:%m:%d')
day=T.strftime('%d')
if(int(day)<=7):
fromto=T.strftime('%Y%m01_%Y%m07')
elif (int(day)<=14):
fromto=T.strftime('%Y%m08_%Y%m14')
elif (int(day)<=21):
fromto=T.strftime('%Y%m15_%Y%m21')
else:
year=int(T.strftime('%Y'))
month=int(T.strftime('%m'))
lastday=monthrange(year,month)[1]
#print(lastday)
fromto=T.strftime('%Y%m22_%Y%m'+str(lastday))
print(T.strftime('%Y'),T.strftime('%m'),fromto)
parentid=getidbyname3(T.strftime('%Y'),T.strftime('%m'),fromto)
try:
print("Try:",pathfile)
mySite.pwg.images.addSimple(image=pathfile, category=parentid)
print("Success:",pathfile)
os.rename(pathfile,f2)
#delete
except Exception as e:
print(e)
pass
#print (T)
#print ("Key: %s, value %s" % (tag, tags[tag]))