diff --git a/README.md b/README.md index 86438ab..83aeffa 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -2014-photo-analysis -=================== +### 2014-photo-analysis + +A summary of the photset [02014 (365)](https://www.flickr.com/photos/zzkt/sets/72157639545946114/) using the Flickr API. (previous versions can be found for [02013 (365)](https://github.com/zzkt/2013-photo-analysis), [2012](https://www.flickr.com/photos/zzkt/sets/72157628790897103/) and [2011](https://www.flickr.com/photos/zzkt/sets/72157625725814116/) diff --git a/shimmering.rb b/shimmering.rb new file mode 100644 index 0000000..e9b59d2 --- /dev/null +++ b/shimmering.rb @@ -0,0 +1,171 @@ +# -*- mode: enh-ruby encoding: utf-8 -*- +# +# Image and metadata analysis for photoset 02014 (365) +# +# Copyright (C) 2014 FoAM vzw +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# Authors +# - nik gaffney +# +# Requirements +# - flickraw +# +# Commentary +# - Flickr docs and reference http://www.rubydoc.info/github/hanklords/flickraw +# +# Changes +# 2014-12-07 +# - mostly working port from racket + +require 'flickraw' +require 'yaml' + +CONFIG = YAML.load_file("config.yml") + +FlickRaw.api_key = CONFIG['api_key'] +FlickRaw.shared_secret = CONFIG['shared_secret'] + +flickr.access_token = CONFIG['access_token'] +flickr.access_secret = CONFIG['access_secret'] + +#FlickRaw.check_certificate = false #assume no malevolence + +# specifics + +photoset_02014 = '72157639545946114' +zzkt = {"id"=>"52731283@N06", "username"=>"zzkt"} + +# {pre}authentication (via https://github.com/hanklords/flickraw) + +login = flickr.test.login +puts "You are now authenticated as #{login.username}" + +# photsets + +def get_photoset (set_id) + flickr.photosets.getPhotos(:photoset_id => set_id, :extras => 'views,tags,date_taken') +end + +def get_photo_list (set_id) + h = flickr.photosets.getPhotos(:photoset_id => set_id, :extras => 'views,tags,date_taken').to_hash + return h.assoc("photo")[1] # => array of hashes or flickr::responses +end + +# sorted photolist of photo titles and views + +def sort_by_views (photo_list) + sorted = photo_list.sort_by { |photo| photo.views.to_i } + return sorted +end + +# extract various info re. favourites + +def favourites (photo) + favs = Array.new + flickr.photos.getFavorites(photo_id: photo.id).to_hash.assoc('person')[1].map do + |fav| favs << fav.username + end + return favs +end + +# titles, contexts, views and favourites from a photoset. (e.g photo 15740214669) + +def get_sets (photo) + sets = Array.new + response=flickr.photos.getAllContexts(photo_id: photo.id).to_hash.assoc('set') + if (not response.nil?) + response[1].map do + |cx| sets << cx.title + end + end + return sets +end + +def get_groups (photo) + groups = Array.new + response=flickr.photos.getAllContexts(photo_id: photo.id).to_hash.assoc('pool') + if (not response.nil?) + response[1].map do + |cx| groups << cx.title + end + end + return groups +end + +def titles_and_views (photo_list) + photo_list.map do + |photo| puts "#{photo.title} views:#{photo.views}" + end +end + +# interestingness + +def most_interesting (user_id) + flickr.photos.search(:user_id => user_id, + :sort =>'interestingness-desc', + :min_taken_date =>'2014-01-01 00:00:00', + :per_page => '500', + :extras => 'views') +end + +# extract tags and tag counts + +def photoset_tags(set_id) + tag_count = Hash.new(0) + flickr.photosets.getPhotos(photoset_id: set_id, extras: 'views,tags,date_taken').photo.map do + |photo| photo.tags.split(" ").each { |name| tag_count[name] += 1 } + end + return tag_count +end + + + +### # # # ## ## ### # +# +# output / testing +# +## # ## # #### # # + + +def exfoliate (set_id) + flickr.photosets.getPhotos(photoset_id: set_id, extras: 'views,tags,date_taken').photo.map do + |photo| + puts "title: #{photo.title} \nviews: #{photo.views}" + puts "favourited by: #{favourites(photo)}" + puts "in sets: #{get_sets(photo)}" + puts "in groups: #{get_groups(photo)}" + puts "/// / /" + end + puts "tags by freq: #{photoset_tags(set_id)}" +end + + +def photoset_urls(set_id) + flickr.photosets.getPhotos(photoset_id: set_id).photo.map do + |photo| FlickRaw.url_b(photo) + end +end + + +exfoliate('72157639545946114') # 2014 + + +######### # # # # # +# +# unported, testing and troubled.. . +# +#### # # # # #