Updated time parsing to work with different formats
This commit is contained in:
parent
83fea003f4
commit
82ff1da944
|
@ -5,6 +5,7 @@ Media package that handles all video operations
|
||||||
|
|
||||||
# load modules
|
# load modules
|
||||||
from sys import argv
|
from sys import argv
|
||||||
|
from datetime import datetime
|
||||||
from fractions import Fraction
|
from fractions import Fraction
|
||||||
import LatLon
|
import LatLon
|
||||||
import mimetypes
|
import mimetypes
|
||||||
|
@ -117,9 +118,11 @@ class Media(object):
|
||||||
for key in self.exif_map['date_taken']:
|
for key in self.exif_map['date_taken']:
|
||||||
try:
|
try:
|
||||||
if(key in exif):
|
if(key in exif):
|
||||||
seconds_since_epoch = time.mktime(datetime.strptime(str(exif[key].value), '%Y:%m:%d %H:%M:%S').timetuple())
|
if(re.match('\d{4}(-|:)\d{2}(-|:)\d{2}', str(exif[key].value)) is not None):
|
||||||
|
seconds_since_epoch = time.mktime(exif[key].value.timetuple())
|
||||||
break;
|
break;
|
||||||
except:
|
except BaseException as e:
|
||||||
|
print e
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if(seconds_since_epoch == 0):
|
if(seconds_since_epoch == 0):
|
||||||
|
|
|
@ -30,37 +30,6 @@ class Photo(Media):
|
||||||
# We only want to parse EXIF once so we store it here
|
# We only want to parse EXIF once so we store it here
|
||||||
self.exif = None
|
self.exif = None
|
||||||
|
|
||||||
"""
|
|
||||||
Get the date which the photo was taken.
|
|
||||||
The date value returned is defined by the min() of mtime and ctime.
|
|
||||||
|
|
||||||
@returns, time object or None for non-photo files or 0 timestamp
|
|
||||||
"""
|
|
||||||
def get_date_taken(self):
|
|
||||||
if(not self.is_valid()):
|
|
||||||
return None
|
|
||||||
|
|
||||||
source = self.source
|
|
||||||
seconds_since_epoch = min(os.path.getmtime(source), os.path.getctime(source))
|
|
||||||
# We need to parse a string from EXIF into a timestamp.
|
|
||||||
# EXIF DateTimeOriginal and EXIF DateTime are both stored in %Y:%m:%d %H:%M:%S format
|
|
||||||
# we use date.strptime -> .timetuple -> time.mktime to do the conversion in the local timezone
|
|
||||||
# EXIF DateTime is already stored as a timestamp
|
|
||||||
# Sourced from https://github.com/photo/frontend/blob/master/src/libraries/models/Photo.php#L500
|
|
||||||
exif = self.get_exif()
|
|
||||||
for key in self.exif_map['date_taken']:
|
|
||||||
try:
|
|
||||||
if(key in exif):
|
|
||||||
seconds_since_epoch = time.mktime(datetime.strptime(str(exif[key]), '%Y:%m:%d %H:%M:%S').timetuple())
|
|
||||||
break;
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if(seconds_since_epoch == 0):
|
|
||||||
return None
|
|
||||||
|
|
||||||
return time.gmtime(seconds_since_epoch)
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Get the duration of a photo in seconds.
|
Get the duration of a photo in seconds.
|
||||||
Uses ffmpeg/ffprobe
|
Uses ffmpeg/ffprobe
|
||||||
|
|
|
@ -15,14 +15,16 @@ def main(argv):
|
||||||
print 'No file specified'
|
print 'No file specified'
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if('type' in args and args['type'] == 'photo'):
|
if('type' in args and args['type'] == 'video'):
|
||||||
media_type = Photo
|
|
||||||
else:
|
|
||||||
media_type = Video
|
media_type = Video
|
||||||
|
else:
|
||||||
|
media_type = Photo
|
||||||
|
|
||||||
media = media_type(args['file'])
|
media = media_type(args['file'])
|
||||||
metadata = media.get_metadata()
|
metadata = media.get_metadata()
|
||||||
|
|
||||||
|
print '%r' % metadata
|
||||||
|
|
||||||
output = {'date_taken': metadata['date_taken']}
|
output = {'date_taken': metadata['date_taken']}
|
||||||
print '%r' % output
|
print '%r' % output
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue