class Birdwatcher::Modules::Statuses::Kml
Public Class Methods
info()
click to toggle source
# File lib/birdwatcher/modules/statuses/kml.rb, line 23 def self.info <<-INFO KML is a file format used to display geographic data in an Earth browser such as Google Earth. You can create KML files to pinpoint locations, add image overlays, and expose rich data in new ways. KML is an international standard maintained by the Open Geospatial Consortium, Inc. (OGC). This module can generate a KML document containing all statuses with geo information which can be loaded into an application like Google Earth to browse and analyze statuses. The module supports mapping statuses from all or specific users. INFO end
Public Instance Methods
run()
click to toggle source
# File lib/birdwatcher/modules/statuses/kml.rb, line 38 def run if option_setting("USERS") users = current_workspace.users_dataset .where("screen_name IN ?", option_setting("USERS").split(" ").map(&:strip)) .order(:screen_name) else users = current_workspace.users_dataset.order(:screen_name) end if users.empty? error("There are no users to process") return false end kml_document = Birdwatcher::KML.new( :name => "Statuses with geo locations" ) users.each do |user| statuses = user.statuses_dataset.where(:geo => true).order(Sequel.desc(:posted_at)).eager(:user) if statuses.count.zero? warn("User #{user.screen_name.bold} has no statuses with geo location; skipping") next end kml_document.add_folder(user.screen_name, :name => "#{user.name} (@#{user.screen_name})", :description => "Statuses from #{user.screen_name}" ) statuses.each do |status| kml_document.add_placemark_to_folder(user.screen_name, :id => status.twitter_id, :name => "@#{escape_html(user.screen_name)}, #{format_date(status.posted_at)}", :description => make_status_description(status), :Snippet => escape_html(excerpt(status.text, 80)), :Style => "<Icon><href>#{escape_html(user.profile_image_url)}</href></Icon>", :Point => "<coordinates>#{escape_html(status.latitude)},#{escape_html(status.longitude)}</coordinates>", :address => "#{escape_html(status.place_name)}, #{escape_html(status.place_country)}", :TimeStamp => escape_html(status.posted_at.strftime('%Y-%m-%dT%l:%M:%S%z')) ) end info "Added #{pluralize(statuses.count, 'status', 'statuses')} from #{user.screen_name.bold}" end File.write(option_setting("DEST"), kml_document.generate) info("Wrote KML document to #{option_setting('DEST').bold}") end
Private Instance Methods
format_date(time)
click to toggle source
# File lib/birdwatcher/modules/statuses/kml.rb, line 100 def format_date(time) time.strftime("%b %d, %Y") end
make_status_description(status)
click to toggle source
# File lib/birdwatcher/modules/statuses/kml.rb, line 83 def make_status_description(status) "<![CDATA[\n" + " <table>\n" + " <tr>\n" + " <td style='vertical-align:top'>\n" + " <img src='#{escape_html(status.user.profile_image_url)}' alt='#{escape_html(status.user.screen_name)}' />\n" + " </td>\n" + " <td>\n" + " <strong>#{escape_html(status.user.name)}</strong> <span style='color: #8899a6'>@#{escape_html(status.user.screen_name)} · <a href='https://twitter.com/#{escape_html(status.user.screen_name)}/status/#{escape_html(status.twitter_id)}' style='color: inherit'>#{format_date(status.posted_at)}</a></span><br />\n" + " <p style='font-size: 16px'>#{escape_html(status.text)}</p>\n" + " <p style='font-style: italic'>#{escape_html(status.place_name)}, #{escape_html(status.place_country)}</p>\n" + " </td>\n" + " </tr>\n" + " </table>\n" + "]]>\n" end