tweetlr 0.1.23 → 0.1.30

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -40,10 +40,13 @@ It's essential that you have a directory called `config` in the directory you ar
40
40
  ```yaml
41
41
  results_per_page: 100
42
42
  result_type: recent
43
- search_term: 'cat+dog+unicorn' #find tweets containing any of these terms
43
+ search_term: 'cat dog unicorn' #find tweets containing any of these terms
44
44
  start_at_tweet_id: 61847783463854082 # the tweet id to start searching at
45
- api_endpoint_twitter: 'http://search.twitter.com/search.json'
46
45
  api_endpoint_tumblr: 'http://www.tumblr.com'
46
+ twitter_app_consumer_key: YOUR APPS TWITTER API KEY
47
+ twitter_app_consumer_secret: YOUR APPS TWITTER API SECRET
48
+ twitter_oauth_token: YOUR APPS TWITTER API OAUTH TOKEN
49
+ twitter_oauth_token_secret: YOUR APPS TWITTER API OAUTH TOKEN SECRET
47
50
  tumblr_oauth_api_key: YOUR APPS TUMBLR API TOKEN
48
51
  tumblr_oauth_api_secret: YOUR APPS TUMBLR API SECRET
49
52
  tumblr_oauth_access_token_key: YOUR BLOGS OAUTH ACCESS TOKEN KEY
data/config/tweetlr.yml CHANGED
@@ -2,6 +2,10 @@ results_per_page: 100
2
2
  result_type: recent
3
3
  search_term: 'cat+dog+unicorn' #find tweets containing any of these terms
4
4
  start_at_tweet_id: 61847783463854082 # the tweet id to start searching at
5
+ twitter_app_consumer_key: YOUR APPS TWITTER API KEY
6
+ twitter_app_consumer_secret: YOUR APPS TWITTER API SECRET
7
+ twitter_oauth_token: YOUR APPS TWITTER API OAUTH TOKEN
8
+ twitter_oauth_token_secret: YOUR APPS TWITTER API OAUTH TOKEN SECRET
5
9
  api_endpoint_twitter: 'http://search.twitter.com/search.json'
6
10
  api_endpoint_tumblr: 'http://www.tumblr.com'
7
11
  tumblr_oauth_api_key: YOUR APPS TUMBLR API TOKEN
data/lib/tweetlr/core.rb CHANGED
@@ -29,7 +29,7 @@ class Tweetlr::Core
29
29
  response = {}
30
30
  response = Tweetlr::Processors::Twitter::lazy_search(twitter_config)
31
31
  if response
32
- process_response response, config, tumblr_config
32
+ process_response response, config
33
33
  # store the highest tweet id
34
34
  config[:since_id] = response['max_id']
35
35
  else
@@ -60,23 +60,23 @@ private
60
60
  log.debug "log level set to #{log.level}"
61
61
  Tweetlr::LogAware.log=log
62
62
  end
63
- def self.process_response(response, config, tumblr_config)
63
+ def self.process_response(response, config)
64
64
  tweets = response['results']
65
- process_and_post tweets, config, tumblr_config if tweets
65
+ process_and_post tweets, config if tweets
66
66
  end
67
- def self.process_and_post(tweets, config, tumblr_config)
67
+ def self.process_and_post(tweets, config)
68
68
  tweets.each do |tweet|
69
69
  tumblr_post = Tweetlr::Combinators::TwitterTumblr::generate_photo_post_from_tweet(tweet, {:whitelist => config[:whitelist], :embedly_key => config[:embedly_key], :group => config[:group]})
70
70
  if tumblr_post.nil? || tumblr_post[:source].nil?
71
71
  log.warn "could not get image source: tweet: #{tweet} --- tumblr post: #{tumblr_post.inspect}"
72
72
  else
73
- post_to_tumblr tumblr_post, tumblr_config
73
+ post_to_tumblr tumblr_post, config
74
74
  end
75
75
  end
76
76
  end
77
- def self.post_to_tumblr(tumblr_post, tumblr_config)
77
+ def self.post_to_tumblr(tumblr_post, config)
78
78
  log.debug "tumblr post: #{tumblr_post}"
79
- res = Tweetlr::Processors::Tumblr.post tumblr_post.merge(tumblr_config)
79
+ res = Tweetlr::Processors::Tumblr.post tumblr_post.merge(config)
80
80
  if res && res.code == "201"
81
81
  log.info "tumblr post created (tumblr response header: #{res.header}"
82
82
  elsif res
@@ -86,21 +86,15 @@ private
86
86
  end
87
87
  end
88
88
  def self.prepare_twitter_config(config)
89
- {
90
- :since_id => config[:since_id] || config[:start_at_tweet_id],
91
- :search_term => config[:terms] || config[:search_term] ,
92
- :results_per_page => config[:results_per_page] || Tweetlr::TWITTER_RESULTS_PER_PAGE,
93
- :result_type => config[:result_type] || Tweetlr::TWITTER_RESULTS_TYPE,
94
- :api_endpoint_twitter => config[:api_endpoint_twitter] || Tweetlr::API_ENDPOINT_TWITTER
95
- }
89
+ config[:since_id] ||= config[:start_at_tweet_id]
90
+ config[:terms] ||= config[:search_term]
91
+ config[:results_per_page] ||= Tweetlr::TWITTER_RESULTS_PER_PAGE
92
+ config[:result_type] ||= Tweetlr::TWITTER_RESULTS_TYPE
93
+ config[:api_endpoint_twitter] ||= Tweetlr::API_ENDPOINT_TWITTER
94
+ config
96
95
  end
97
96
  def self.prepare_tumblr_config(config)
98
- {
99
- :tumblr_oauth_access_token_key => config[:tumblr_oauth_access_token_key],
100
- :tumblr_oauth_access_token_secret => config[:tumblr_oauth_access_token_secret],
101
- :tumblr_oauth_api_key => config[:tumblr_oauth_api_key],
102
- :tumblr_oauth_api_secret => config[:tumblr_oauth_api_secret],
103
- :tumblr_blog_hostname => config[:tumblr_blog_hostname] || config[:group]
104
- }
97
+ config[:tumblr_blog_hostname] ||= config[:group]
98
+ config
105
99
  end
106
100
  end
@@ -17,14 +17,14 @@ module Tweetlr::Processors
17
17
  #optional arguments: :tags, :type (default: 'photo')
18
18
  #
19
19
  def self.post(options={})
20
- log.info "posting to #{options[:tumblr_blog_hostname] || options[:group]}..."
21
- base_hostname = options[:tumblr_blog_hostname] || options[:group]
22
- tumblr_oauth_api_key= options[:tumblr_oauth_api_key]
23
- tumblr_oauth_api_secret= options[:tumblr_oauth_api_secret]
24
- access_token_key = options[:tumblr_oauth_access_token_key]
25
- access_token_secret = options[:tumblr_oauth_access_token_secret]
26
- type = options[:type] || 'photo'
27
- tags = options[:tags] || ''
20
+ log.info "posting to #{options['tumblr_blog_hostname'] || options['group']}..."
21
+ base_hostname = options['tumblr_blog_hostname'] || options['group']
22
+ tumblr_oauth_api_key= options['tumblr_oauth_api_key']
23
+ tumblr_oauth_api_secret= options['tumblr_oauth_api_secret']
24
+ access_token_key = options['tumblr_oauth_access_token_key']
25
+ access_token_secret = options['tumblr_oauth_access_token_secret']
26
+ type = options['type'] || 'photo'
27
+ tags = options['tags'] || ''
28
28
  post_response = nil
29
29
 
30
30
  if base_hostname && access_token_key && access_token_secret
@@ -1,6 +1,7 @@
1
1
  local_path=File.dirname(__FILE__)
2
2
  require "#{local_path}/http"
3
3
  require "#{local_path}/../log_aware"
4
+ require 'twitter'
4
5
 
5
6
  module Tweetlr::Processors
6
7
  #utilities for dealing with twitter
@@ -25,21 +26,53 @@ module Tweetlr::Processors
25
26
 
26
27
  #fire a new search
27
28
  def self.search(config)
28
- search_call = "#{config[:api_endpoint_twitter]}?ors=#{config[:search_term]}&result_type=#{config[:result_type]}&rpp=#{config[:results_per_page]}"
29
- Tweetlr::Processors::Http::http_get_json search_call
29
+ search_call = "#{config['search_term'].gsub('+', ' OR ')} filter:links"
30
+ log.debug "#{self}::search search_call: #{search_call}"
31
+ response = self.call_twitter_api(search_call, config)
32
+ log.debug "#{self}::call_twitter_api response: #{response.inspect}"
33
+ response
30
34
  end
31
35
 
32
36
  # lazy update - search for a term or refresh the search if a response is available already
33
37
  def self.lazy_search(config)
38
+ log.debug "#{self}::lazy_search called with config #{config}"
34
39
  response = nil
35
40
  if config
36
- search_url = "#{config[:api_endpoint_twitter]}?since_id=#{config[:since_id]}&ors=#{config[:search_term]}&result_type=#{config[:result_type]}&rpp=#{config[:results_per_page]}"
37
- log.info "lazy search using '#{search_url}'"
38
- response = Tweetlr::Processors::Http::http_get_json search_url
41
+ search_call = "#{config['search_term'].gsub('+', ' OR ')} filter:links"
42
+ log.info "lazy search using '#{search_call}, :since_id => #{config['since_id'] || config[:since_id]}, :count => #{config['results_per_page']}, :result_type => #{config['result_type']})'"
43
+ response = self.call_twitter_api(search_call, config, :lazy)
39
44
  else
40
45
  log.error "#{self}.lazy_search: no config given!"
41
46
  end
42
47
  response
43
48
  end
49
+ private
50
+ def self.call_twitter_api(search_call, config, lazy=false)
51
+ ::Twitter.configure do |configuration|
52
+ configuration.consumer_key = config['twitter_app_consumer_key']
53
+ configuration.consumer_secret = config['twitter_app_consumer_secret']
54
+ configuration.oauth_token = config['twitter_oauth_token']
55
+ configuration.oauth_token_secret = config['twitter_oauth_token_secret']
56
+ end
57
+ max_attempts = 3
58
+ num_attempts = 0
59
+ begin
60
+ num_attempts += 1
61
+ if lazy
62
+ response = ::Twitter.search(search_call, :since_id => config['since_id'] || config[:since_id], :count => config['results_per_page'], :result_type => config['result_type'])
63
+ else
64
+ response = ::Twitter.search(search_call, :count => config['results_per_page'], :result_type => config['result_type'])
65
+ end
66
+ rescue ::Twitter::Error::TooManyRequests => error
67
+ if num_attempts <= max_attempts
68
+ # NOTE: Your process could go to sleep for up to 15 minutes but if you
69
+ # retry any sooner, it will almost certainly fail with the same exception.
70
+ sleep error.rate_limit.reset_in
71
+ retry
72
+ else
73
+ log.error "Twitter API rate limit exceeded - going to sleep for error.rate_limit.reset_in seconds. (#{error})"
74
+ end
75
+ end
76
+ end
44
77
  end
45
78
  end
data/lib/tweetlr.rb CHANGED
@@ -2,7 +2,7 @@ require 'tweetlr/log_aware'
2
2
  require 'tweetlr/core'
3
3
 
4
4
  module Tweetlr
5
- VERSION = '0.1.23'
5
+ VERSION = '0.1.30'
6
6
 
7
7
  API_ENDPOINT_TWITTER = 'http://search.twitter.com/search.json'
8
8
  API_ENDPOINT_TUMBLR = 'http://www.tumblr.com'
data/spec/core_spec.rb CHANGED
@@ -2,26 +2,17 @@ require 'spec_helper'
2
2
 
3
3
  describe Tweetlr::Core do
4
4
 
5
- config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml.test')
5
+ config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml.dev')
6
6
  config = YAML.load_file(config_file)
7
7
  TIMESTAMP = config['twitter_timestamp']
8
8
  WHITELIST = config['whitelist']
9
9
 
10
- let(:tweetlr_config) do
11
- {
12
- :since_id => 0,
13
- :results_per_page => 3,
14
- :search_term => 'coffeediary',
15
- :result_type => 'recent',
16
- :api_endpoint_twitter => Tweetlr::API_ENDPOINT_TWITTER,
17
- :loglevel=>1,
18
- :tumblr_oauth_access_token_key => config['tumblr_oauth_access_token_key'],
19
- :tumblr_oauth_access_token_secret => config['tumblr_oauth_access_token_secret'],
20
- :tumblr_oauth_api_secret => config['tumblr_oauth_api_secret'],
21
- :tumblr_oauth_api_key => config['tumblr_oauth_api_key'],
22
- :tumblr_blog_hostname => config['tumblr_blog_hostname']
23
- }
10
+ before :all do
11
+ config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml.dev')
12
+ config = YAML.load_file(config_file)
13
+ @tweetlr_config = config
24
14
  end
15
+
25
16
  let(:stubbed_tumblr_post) do
26
17
  {:tumblr_blog_hostname=>nil, :type=>"photo", :date=>"Sun, 28 Apr 2013 14:10:43 +0000", :source=>"https://irs0.4sqi.net/img/general/600x600/304170_IfHzPdhxs9mpGlPk8jogxdul8q8KhTBNmeAiP9H5TyY.jpg", :tags=>"sven_kr", :state=>"published", :caption=>"<a href=\"http://twitter.com/sven_kr/statuses/328511599881097216\" alt=\"tweet\">@sven_kr</a>: #coffeediary Wanted to stay at home but had to test the new tweetlr ;-) (@ Mamalicious w/ @snoopsmaus) [pic]: http://t.co/7ilE9BDJxJ"}
27
18
  end
@@ -32,43 +23,19 @@ describe Tweetlr::Core do
32
23
 
33
24
  describe ".new" do
34
25
  it "initializes a new instance" do
35
- new_instance = Tweetlr::Core.new tweetlr_config
26
+ new_instance = Tweetlr::Core.new @tweetlr_config
36
27
  new_instance.should be
37
28
  end
38
29
  end
39
30
  describe ".crawl(config)" do
40
31
  before(:each) do
41
32
  stub_tumblr
42
- stub_twitter
43
33
  stub_oauth
44
34
  end
45
35
  it "crawls twitter and posts to tumblr" do
46
36
  Tweetlr::Combinators::TwitterTumblr.stub(:generate_photo_post_from_tweet).and_return stubbed_tumblr_post
47
- since_id_before = tweetlr_config[:since_id]
48
- result = Tweetlr::Core.crawl(tweetlr_config)
49
- since_id_before.should_not == result[:since_id]
50
- end
51
- it "copes with legacy config that use tumblr v1 api (basic auth)" do
52
- legacy_config = {
53
- :id=>16,
54
- :search_term=>"booga",
55
- :tumblr_email=>"wooga@booga.de",
56
- :tumblr_password=>"boogawooga",
57
- :since_id=>"246543935663661057",
58
- :results_per_page=>3,
59
- :result_type=>nil,
60
- :api_endpoint_twitter=>nil,
61
- :api_endpoint_tumblr=>nil,
62
- :update_period=>900,
63
- :shouts=>nil,
64
- :loglevel=>1,
65
- :whitelist=>["user1", "user2"],
66
- :last_crawl=>"Fri, 14 Sep 2012 09:43:10 UTC +00:00",
67
- :active=>true,
68
- :tumblr_oauth_access_token_key=>nil,
69
- :tumblr_oauth_access_token_secret=>nil}
70
- since_id_before = legacy_config[:since_id]
71
- result = Tweetlr::Core.crawl(legacy_config)
37
+ since_id_before = @tweetlr_config['since_id']
38
+ result = Tweetlr::Core.crawl(@tweetlr_config)
72
39
  since_id_before.should_not == result[:since_id]
73
40
  end
74
41
  end
@@ -2,21 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  describe Tweetlr::Processors::Tumblr do
4
4
  before :all do
5
- config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml')
5
+ config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml.dev')
6
6
  config = YAML.load_file(config_file)
7
7
  @twitter_response = {"from_user_id_str"=>"1915714", "profile_image_url"=>"http://a0.twimg.com/profile_images/386000279/2_normal.jpg", "created_at"=>"Sun, 17 Apr 2011 16:48:42 +0000", "from_user"=>"whitey_Mc_whIteLIst", "id_str"=>"59659561224765440", "metadata"=>{"result_type"=>"recent"}, "to_user_id"=>nil, "text"=>"Rigaer #wirsounterwegs #{@first_link} @ Augenarzt Dr. Lierow #{@second_link} #{@third_link}", "id"=>59659561224765440, "from_user_id"=>1915714, "geo"=>{"type"=>"Point", "coordinates"=>[52.5182, 13.454]}, "iso_language_code"=>"de", "place"=>{"id"=>"3078869807f9dd36", "type"=>"city", "full_name"=>"Berlin, Berlin"}, "to_user_id_str"=>nil, "source"=>"&lt;a href=&quot;http://instagr.am&quot; rel=&quot;nofollow&quot;&gt;instagram&lt;/a&gt;"}
8
- @tweetlr_config = {
9
- :since_id => 0,
10
- :search_term => 'moped',
11
- :results_per_page => 100,
12
- :result_type => 'recent',
13
- :api_endpoint_twitter => Tweetlr::API_ENDPOINT_TWITTER,
14
- :tumblr_oauth_api_key => config['tumblr_oauth_api_key'],
15
- :tumblr_oauth_api_secret => config['tumblr_oauth_api_secret'],
16
- :tumblr_blog_hostname => config['tumblr_blog_hostname'],
17
- :tumblr_oauth_access_token_key => config['tumblr_oauth_access_token_key'],
18
- :tumblr_oauth_access_token_secret => config['tumblr_oauth_access_token_secret']
19
- }
8
+ @tweetlr_config = config
20
9
  end
21
10
  it "posts to tumblr" do
22
11
  stub_tumblr
@@ -1,38 +1,33 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Tweetlr::Processors::Twitter do
4
+ before :all do
5
+ config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml.dev')
6
+ @twitter_config = YAML.load_file(config_file)
7
+ end
4
8
  before :each do
5
9
  @first_link = "http://url.com"
6
10
  @second_link = "http://instagr.am/p/DzCWn/"
7
11
  @third_link = "https://imageurl.com"
8
12
  @twitter_response = {"from_user_id_str"=>"1915714", "profile_image_url"=>"http://a0.twimg.com/profile_images/386000279/2_normal.jpg", "created_at"=>"Sun, 17 Apr 2011 16:48:42 +0000", "from_user"=>"whitey_Mc_whIteLIst", "id_str"=>"59659561224765440", "metadata"=>{"result_type"=>"recent"}, "to_user_id"=>nil, "text"=>"Rigaer #wirsounterwegs #{@first_link} @ Augenarzt Dr. Lierow #{@second_link} #{@third_link}", "id"=>59659561224765440, "from_user_id"=>1915714, "geo"=>{"type"=>"Point", "coordinates"=>[52.5182, 13.454]}, "iso_language_code"=>"de", "place"=>{"id"=>"3078869807f9dd36", "type"=>"city", "full_name"=>"Berlin, Berlin"}, "to_user_id_str"=>nil, "source"=>"&lt;a href=&quot;http://instagr.am&quot; rel=&quot;nofollow&quot;&gt;instagram&lt;/a&gt;"}
9
- @twitter_config = {
10
- :since_id => 0,
11
- :search_term => 'moped',
12
- :results_per_page => 100,
13
- :result_type => 'recent',
14
- :api_endpoint_twitter => Tweetlr::API_ENDPOINT_TWITTER
15
- }
16
13
  end
17
14
  describe "#search(config)" do
18
15
  it "searches twitter for a given term" do
19
- stub_twitter
16
+ #stub_twitter
20
17
  response = Tweetlr::Processors::Twitter::search @twitter_config
21
- tweets = response['results']
18
+ tweets = response.statuses
22
19
  tweets.should be
23
20
  tweets.should_not be_empty
24
21
  end
25
22
  end
26
23
  describe "#lazy_search(config)" do
27
24
  it "searches twitter for a given term" do
28
- stub_twitter
29
25
  response = Tweetlr::Processors::Twitter::lazy_search @twitter_config
30
26
  tweets = response['results']
31
27
  tweets.should be
32
28
  tweets.should_not be_empty
33
29
  end
34
30
  it "copes with nil as input" do
35
- stub_twitter
36
31
  Tweetlr::Processors::Twitter::lazy_search(nil).should be_nil
37
32
  end
38
33
  end
data/spec/spec_helper.rb CHANGED
@@ -11,15 +11,18 @@ end
11
11
  require "bundler"
12
12
  require "logger"
13
13
  require "yaml"
14
+ require 'fakeweb'
14
15
  require "#{File.dirname(__FILE__)}/../lib/tweetlr"
15
16
 
16
17
 
17
18
  Bundler.require :default, :development, :test
18
19
 
19
20
  logger = Logger.new('/dev/null')
20
- #logger.level = Logger::DEBUG
21
21
  Tweetlr::LogAware.log = logger
22
- Tweetlr::LogAware.log
22
+
23
+ FakeWeb.allow_net_connect = false
24
+ twitter_search_api_response = File.open("#{File.dirname(__FILE__)}/support/fixtures/twitter_search_api_response.json", 'rb') { |file| file.read }
25
+ FakeWeb.register_uri(:get, %r|https://api.twitter.com/1.1/search/tweets.json|, :response => twitter_search_api_response)
23
26
 
24
27
  def check_pic_url_extraction(service)
25
28
  image_url = Tweetlr::Processors::PhotoService.find_image_url @links[service]
@@ -48,11 +51,6 @@ Content-Type: text/plain; charset=utf-8
48
51
  stub_instagram
49
52
  end
50
53
 
51
- def stub_twitter
52
- Curl::Easy.any_instance.stub(:body_str).and_return %^{"completed_in":0.013,"max_id":328511599881097216,"max_id_str":"328511599881097216","next_page":"?page=2&max_id=328511599881097216&q=coffeediary&rpp=3&result_type=recent","page":1,"query":"coffeediary","refresh_url":"?since_id=328511599881097216&q=coffeediary&result_type=recent","results":[{"created_at":"Sun, 28 Apr 2013 14:10:43 +0000","from_user":"sven_kr","from_user_id":61437533,"from_user_id_str":"61437533","from_user_name":"Sven Kr\u00e4uter | 5v3n","geo":{"coordinates":[53.563684,9.959734],"type":"Point"},"id":328511599881097216,"id_str":"328511599881097216","iso_language_code":"en","metadata":{"result_type":"recent"},"place":{"full_name":"Hamburg","id":"171b760b35e47fe5","type":"CITY"},"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2305774679\/am2l5mt563000bt0jwvw_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2305774679\/am2l5mt563000bt0jwvw_normal.jpeg","source":"&lt;a href=&quot;http:\/\/foursquare.com&quot;&gt;foursquare&lt;\/a&gt;","text":"#coffeediary Wanted to stay at home but had to test the new tweetlr ;-) (@ Mamalicious w\/ @snoopsmaus) [pic]: http:\/\/t.co\/7ilE9BDJxJ"}],"results_per_page":1,"since_id":0,"since_id_str":"0"}^
53
- Curl::Easy.any_instance.stub(:perform).and_return Curl::Easy.new
54
- end
55
-
56
54
  def stub_twimg
57
55
  Curl::Easy.any_instance.stub(:body_str).and_return %|<div class="js-tweet-details-fixer tweet-details-fixer">
58
56
 
@@ -531,4 +529,3 @@ def stub_eyeem
531
529
  Curl::Easy.any_instance.stub(:body_str).and_return "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta charset=\"utf-8\"/>\n<link rel=\"shortcut icon\" href=\"/favicon.ico\" />\n<meta name=\"title\" content=\"EyeEm\" />\n<meta name=\"description\" content=\"EyeEm is a photo-sharing and discovery app that connects people through the photos they take. Snap a photo and see where it takes you! It&#039;s free.\" />\n<title>EyeEm</title>\n<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"/css/eyeem.c.css?1334330223\" />\n <meta content=\"EyeEm\" property=\"og:title\">\n<meta content=\"website\" property=\"og:type\">\n<meta content=\"EyeEm\" property=\"og:site_name\">\n<meta content=\"http://www.eyeem.com/p/326629\" property=\"og:url\">\n<meta content=\"http://www.eyeem.com/thumb/640/480/e35db836c5d3f02498ef60fc3d53837fbe621561-1334126483\" property=\"og:image\">\n<meta content=\"EyeEm is a photo-sharing and discovery app that connects people through the photos they take. Snap a photo and see where it takes you! It's free.\" property=\"og:description\">\n<meta content=\"138146182878222\" property=\"fb:app_id\">\n<script type=\"text/javascript\">\n\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-12590370-2']);\n _gaq.push(['_trackPageview']);\n\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n\n</script>\n</head>\n<body>\n\n<div id=\"fb-root\">\n <!-- you must include this div for the JS SDK to load properly -->\n</div>\n<script>\n window.fbAsyncInit = function() {\n FB.init({\n appId : '138146182878222', // App ID\n channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File\n status : true, // check login status\n cookie : true, // enable cookies to allow the server to access the session\n xfbml : true // parse XFBML\n });\n\n // Additional initialization code here\n };\n\n // Load the SDK Asynchronously\n (function(d){\n var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];\n if (d.getElementById(id)) {return;}\n js = d.createElement('script'); js.id = id; js.async = true;\n js.src = \"//connect.facebook.net/en_US/all.js\";\n ref.parentNode.insertBefore(js, ref);\n }(document));\n</script>\n \n \n\n\n <div id=\"page\">\n <div id=\"header\">\n <div name=\"top\" class=\"top_bar\"><div class=\"top_bar-inner\">\n <div class=\"padding-top\"></div>\n <div class=\"top_bar_content\">\n <div class=\"search_box\">\n \t<form action=\"/search\" method=\"get\" enctype=\"application/x-www-form-urlencoded\">\n <input type=\"text\" name=\"query\" class=\"search_form_query\" placeholder=\"Search\" id=\"query\" /> <!-- \t <input class=\"search_form_submit\" type=\"image\" value=\"submit\" src=\"\"/> -->\n \t <input class=\"search_form_submit\" type=\"submit\" value=\"\" />\n \t</form>\n </div>\n <div class=\"homelink\">\n \t<a href=\"/\">\n <img src=\"/images/layout/topbar_logo.png\">\n \t</a>\n </div>\n \n \n \n <div class=\"top_menus\">\n <div class=\"top_menu user_menu\">\n \t\t <a class=\"user_login smooth_hover\" href=\"/login\">\n \t\t\t\t<span class=\"\">Login</span>\n \t\t </a>\n </div>\n \n \n \n <div class=\"top_menu about_menu\">\n \t\t <a class=\"top_menu_button about_box smooth_hover\" href=\"javascript:void(0)\">\n \t\t\t\t<span class=\"about_name\">About</span>\n \t\t <img class=\"more_triangle\" src=\"/images/layout/topbar_triangle.png\">\n \t\t </a>\n \t\t <ul class=\"\">\n \t\t<li class=\"hidden\"><a class=\"smooth_hover\" href=\"/whatiseyeem\"><span>What is EyeEm?</span></a></li>\n \t\t<li class=\"hidden\"><a class=\"smooth_hover\" href=\"/gettheapp\"><span>Download the App</span></a></li>\n \t\t<li class=\"hidden\"><a class=\"smooth_hover\" href=\"/contact\"><span>Contact and Press</span></a></li>\n \t\t<li class=\"hidden\"><a class=\"smooth_hover\" href=\"/team\"><span>Team & Jobs</span></a></li>\n \t\t<li class=\"hidden\"><a class=\"smooth_hover\" href=\"http://blog.eyeem.com\" target=\"_blank\"><span>Blog</span></a></li>\n \t\t<li class=\"hidden\"><a class=\"smooth_hover\" href=\"/pages/service.html\"><span>Terms of service</span></a></li>\n \t\t </ul>\n </div> \n </div>\n \n </div>\n</div></div>\n <div class=\"top_bar_back\"></div>\n </div> <!-- /#header -->\n <div id=\"content\">\n \n\n<div class=\"join_block\">\n <div class=\"join_inner\">\n <span class=\"join_description\">\n <p>Take &amp; Discover photos</p>\n <p>together with EyeEm!</p>\n </span>\n <div class=\"join_now\">\n <div><a class=\"eyeem_button join_button\" href=\"/signup\">Join now!</a></div>\n <div class=\"learn_more\"><a class=\"\" href=\"/whatiseyeem\">Learn more</a></div>\n </div>\n </div>\n</div>\n<div class=\"inner-content photo_inner_content\">\n <div class=\"photo_indicator\"><img src=\"/images/layout/triangle_indicator.png\"></div>\n <div class=\"viewports-wrapper\">\n <div class=\"viewport active\" data-photo-id=\"326629\">\n \n\n <div class=\"viewport-user\">\n \t<a href=\"/u/8157\">\n \t\t<img class=\"user_face\" src=\"http://www.eyeem.com/thumb/sq/50/2033ff7cc732c4b8e1ee4375aa00b16d365b51c7.jpg\">\n \t</a>\n \t<span class=\"user_text\">\n \t<a class=\"user_name\" href=\"/u/8157\">\n \t\t<span><h2>Sven Kr\xC3\xA4uter</h2></span>\n \t</a>\n \t<div class=\"meta\">\n <div class=\"viewport-age\">\n \t <span>4</span> days ago </div>\n \t</div>\n \t</span>\n </div> \t\t\n \t\t\n \t\t\n <div class=\"viewport-pic\">\n <img src=\"http://www.eyeem.com/thumb/h/1024/e35db836c5d3f02498ef60fc3d53837fbe621561-1334126483\">\n </div>\n \n \n <div class=\"viewport-albums\">\n <div class=\"tags tags_arrow\">\n \n \n <div class=\"album_tag_box hover_container\">\n <a class=\"album_tag tag\" href=\"/a/168255\">#coffeediary</a>\n </div> \t \t\n \t </div>\n <div class=\"places tags_arrow\">\n \t </div>\n </div>\n \n \n\n <div class=\"viewport-likes\">\n <div class=\"likes_count count\">1 like</div>\n <span class=\"user_thumbs\">\n <a class=\"user_thumb hover_container\" href=\"/u/85456\">\n <img class=\"user_face\" alt=\"filtercake-nophoto\" src=\"http://www.eyeem.com/thumb/sq/50/a5799d443153b9becad3a1e15d15c1ad79739f32.jpg\">\n </a>\n </span>\n \t<span class=\"like_area\">\n <div class=\"like_action action\">\n \t \t\t \t\t\t<a class=\"photo_like eyeem_button like_button\" href=\"javascript:void(0)\">Like<img class=\"button_spinner\" src=\"/images/layout/spinner.gif\"></a>\n \t\t \t </div> \t\n \t\n \t</span>\n </div>\n \n \n <div class=\"viewport-comments\">\n \t<div class=\"comments_count count\">1 comment</div>\n \t \t<div class=\"comment_box\">\n <a class=\"user_face_link\" href=\"/u/8157\">\n <img class=\"user_face\" src=\"http://www.eyeem.com/thumb/sq/50/2033ff7cc732c4b8e1ee4375aa00b16d365b51c7.jpg\">\n </a>\n <span class=\"comment_display\">\n <a class=\"user_name\" href=\"/u/8157\">\n Sven Kr\xC3\xA4uter </a>\n <div class=\"comment_body\">\n still using the bialetti until the spare parts for the espresso machine arrive. quite cozy actually. </div>\n <div class=\"comment_age\"><span>4</span> days ago</div>\n </span>\n</div>\n \t </div>\n \n <div class=\"viewport-social\">\n <div class=\"social\">\n <div class=\"twitter-like\">\n <script src=\"http://platform.twitter.com/widgets.js\" type=\"text/javascript\"></script>\n <a href=\"http://twitter.com/share\" class=\"twitter-share-button\" data-url=\"http://www.eyeem.com/p/326629\">Tweet</a>\n </div>\n <div class=\"facebook-like\">\n <div class=\"fb-like\" data-href=\"http://www.eyeem.com/p/326629\" data-send=\"false\" data-layout=\"button_count\" data-width=\"20\" data-show-faces=\"false\" data-font=\"verdana\"></div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n</div> </div> <!-- /#content -->\n </div> <!-- /#page -->\n \n <script type=\"text/javascript\">\n var app_url = 'http://www.eyeem.com/';\nvar signup_url = 'http://www.eyeem.com/signup';\nvar authenticated = false;\n </script>\n\n <script type=\"text/javascript\" src=\"/js/eyeem.c.js?1334330223\"></script>\n\n</body>\n</html>"
532
530
  end
533
531
 
534
-
@@ -0,0 +1,22 @@
1
+ HTTP/1.1 200 OK
2
+ cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
3
+ content-length: 32656
4
+ content-type: application/json;charset=utf-8
5
+ date: Fri, 28 Jun 2013 17:55:47 GMT
6
+ expires: Tue, 31 Mar 1981 05:00:00 GMT
7
+ last-modified: Fri, 28 Jun 2013 17:55:47 GMT
8
+ pragma: no-cache
9
+ server: tfe
10
+ set-cookie: lang=de
11
+ set-cookie: guest_id=v1%3A137244214779516322; Domain=.twitter.com; Path=/; Expires=Sun, 28-Jun-2015 17:55:47 UTC
12
+ status: 200 OK
13
+ strict-transport-security: max-age=631138519
14
+ x-access-level: read
15
+ x-frame-options: SAMEORIGIN
16
+ x-rate-limit-limit: 180
17
+ x-rate-limit-remaining: 179
18
+ x-rate-limit-reset: 1372443047
19
+ x-transaction: d71db59d56b39732
20
+ x-xss-protection: 1; mode=block
21
+
22
+ {"statuses":[{"metadata":{"result_type":"recent","iso_language_code":"en"},"created_at":"Fri Jun 28 04:22:55 +0000 2013","id":350469335690645504,"id_str":"350469335690645504","text":"#kaffee1.0 #coffee #pics #tasskaff #coffeediary #smkh #dailycoffee http:\/\/t.co\/4cu5M83yG5","source":"\u003ca href=\"http:\/\/instagram.com\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":5402272,"id_str":"5402272","name":"oliver kreimer","screen_name":"011i","location":"Hameln, Germany","description":"#coffee #kids #computerscience #photography #biking","url":"http:\/\/t.co\/BXWfd1Nj9h","entities":{"url":{"urls":[{"url":"http:\/\/t.co\/BXWfd1Nj9h","expanded_url":"http:\/\/nullenundeinsenschubser.de","display_url":"nullenundeinsenschubser.de","indices":[0,22]}]},"description":{"urls":[]}},"protected":false,"followers_count":491,"friends_count":788,"listed_count":38,"created_at":"Sun Apr 22 14:31:06 +0000 2007","favourites_count":6289,"utc_offset":3600,"time_zone":"Berlin","geo_enabled":true,"verified":false,"statuses_count":15542,"lang":"de","contributors_enabled":false,"is_translator":false,"profile_background_color":"6E6868","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/5402272\/1355478803","profile_link_color":"243964","profile_sidebar_border_color":"948D7B","profile_sidebar_fill_color":"5888EB","profile_text_color":"000000","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[{"text":"kaffee1","indices":[0,8]},{"text":"coffee","indices":[11,18]},{"text":"pics","indices":[19,24]},{"text":"tasskaff","indices":[25,34]},{"text":"coffeediary","indices":[35,47]},{"text":"smkh","indices":[48,53]},{"text":"dailycoffee","indices":[54,66]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/4cu5M83yG5","expanded_url":"http:\/\/instagram.com\/p\/bFs2o7SfBx\/","display_url":"instagram.com\/p\/bFs2o7SfBx\/","indices":[67,89]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},{"metadata":{"result_type":"recent","iso_language_code":"ja"},"created_at":"Thu Jun 27 11:55:31 +0000 2013","id":350220846079553537,"id_str":"350220846079553537","text":"You'll see. #coffeediary #Hipstamatic #Tinto1884 #Dylan @ \u30d5\u30ec\u30c3\u30b7\u30e5\u30cd\u30b9\u30d0\u30fc\u30ac\u30fc \u7d4c\u5802\u5e97 http:\/\/t.co\/SbEHLk86Md","source":"\u003ca href=\"http:\/\/instagram.com\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":28969581,"id_str":"28969581","name":"Saiko Minomusi","screen_name":"saikom","location":"under your bed..","description":"Love music\/noise\/festivals\/f1\/\uf8ff\/art and science\/paprika and bambie\/etc. ''I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?''","url":null,"entities":{"description":{"urls":[]}},"protected":false,"followers_count":955,"friends_count":783,"listed_count":52,"created_at":"Sun Apr 05 10:34:04 +0000 2009","favourites_count":2300,"utc_offset":32400,"time_zone":"Tokyo","geo_enabled":false,"verified":false,"statuses_count":16327,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"2E2916","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/450080932\/kinokonoko.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/450080932\/kinokonoko.jpg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1156733233\/photo6_normal.jpg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1156733233\/photo6_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/28969581\/1361186037","profile_link_color":"FA4605","profile_sidebar_border_color":"8A2BE2","profile_sidebar_fill_color":"333333","profile_text_color":"3BCBFF","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":{"type":"Point","coordinates":[35.64910858,139.63653356]},"coordinates":{"type":"Point","coordinates":[139.63653356,35.64910858]},"place":null,"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[{"text":"coffeediary","indices":[12,24]},{"text":"Hipstamatic","indices":[26,38]},{"text":"Tinto1884","indices":[39,49]},{"text":"Dylan","indices":[50,56]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/SbEHLk86Md","expanded_url":"http:\/\/instagram.com\/p\/bD7q8Jg89I\/","display_url":"instagram.com\/p\/bD7q8Jg89I\/","indices":[75,97]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"ja"},{"metadata":{"result_type":"recent","iso_language_code":"de"},"created_at":"Thu Jun 27 09:35:52 +0000 2013","id":350185703415623684,"id_str":"350185703415623684","text":"Kleine St\u00e4rkung :) #coffee #coffeediary @ Impala Coffee http:\/\/t.co\/bm1UvT9dcR","source":"\u003ca href=\"http:\/\/instagram.com\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":280928169,"id_str":"280928169","name":"N. White","screen_name":"citoyenberlin","location":"Berlin","description":"Liest B\u00fccher, sammelt Operngesamtaufnahmen, trinkt gerne Tee und mag meist nicht abwarten.\r\nBooks, opera recordings, tea; sometimes impatient.","url":null,"entities":{"description":{"urls":[]}},"protected":false,"followers_count":191,"friends_count":281,"listed_count":10,"created_at":"Tue Apr 12 09:04:47 +0000 2011","favourites_count":2499,"utc_offset":3600,"time_zone":"Berlin","geo_enabled":true,"verified":false,"statuses_count":7378,"lang":"de","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/821228029\/3d42a951fb39ce38eef572ad0794357e.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/821228029\/3d42a951fb39ce38eef572ad0794357e.jpeg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1308803654\/neu_normal.jpg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1308803654\/neu_normal.jpg","profile_link_color":"0084B4","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":{"type":"Point","coordinates":[52.49834597,13.354063]},"coordinates":{"type":"Point","coordinates":[13.354063,52.49834597]},"place":{"id":"3078869807f9dd36","url":"http:\/\/api.twitter.com\/1\/geo\/id\/3078869807f9dd36.json","place_type":"city","name":"Berlin","full_name":"Berlin, Berlin","country_code":"DE","country":"Germany","bounding_box":{"type":"Polygon","coordinates":[[[13.088303999999999,52.338079],[13.760909,52.338079],[13.760909,52.675323],[13.088303999999999,52.675323]]]},"attributes":{}},"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[{"text":"coffee","indices":[19,26]},{"text":"coffeediary","indices":[27,39]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/bm1UvT9dcR","expanded_url":"http:\/\/instagram.com\/p\/bDr4hbpc4f\/","display_url":"instagram.com\/p\/bDr4hbpc4f\/","indices":[56,78]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"metadata":{"result_type":"recent","iso_language_code":"en"},"created_at":"Thu Jun 27 04:05:04 +0000 2013","id":350102453888356352,"id_str":"350102453888356352","text":"#kaffee1.0 #coffee #pics #tasskaff #coffeediary #smkh #dailycoffee http:\/\/t.co\/q6xOREZRQE","source":"\u003ca href=\"http:\/\/instagram.com\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":5402272,"id_str":"5402272","name":"oliver kreimer","screen_name":"011i","location":"Hameln, Germany","description":"#coffee #kids #computerscience #photography #biking","url":"http:\/\/t.co\/BXWfd1Nj9h","entities":{"url":{"urls":[{"url":"http:\/\/t.co\/BXWfd1Nj9h","expanded_url":"http:\/\/nullenundeinsenschubser.de","display_url":"nullenundeinsenschubser.de","indices":[0,22]}]},"description":{"urls":[]}},"protected":false,"followers_count":491,"friends_count":788,"listed_count":38,"created_at":"Sun Apr 22 14:31:06 +0000 2007","favourites_count":6289,"utc_offset":3600,"time_zone":"Berlin","geo_enabled":true,"verified":false,"statuses_count":15542,"lang":"de","contributors_enabled":false,"is_translator":false,"profile_background_color":"6E6868","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/5402272\/1355478803","profile_link_color":"243964","profile_sidebar_border_color":"948D7B","profile_sidebar_fill_color":"5888EB","profile_text_color":"000000","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[{"text":"kaffee1","indices":[0,8]},{"text":"coffee","indices":[11,18]},{"text":"pics","indices":[19,24]},{"text":"tasskaff","indices":[25,34]},{"text":"coffeediary","indices":[35,47]},{"text":"smkh","indices":[48,53]},{"text":"dailycoffee","indices":[54,66]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/q6xOREZRQE","expanded_url":"http:\/\/instagram.com\/p\/bDGBAASfOD\/","display_url":"instagram.com\/p\/bDGBAASfOD\/","indices":[67,89]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},{"metadata":{"result_type":"recent","iso_language_code":"en"},"created_at":"Wed Jun 26 04:46:18 +0000 2013","id":349750442579861506,"id_str":"349750442579861506","text":"#kaffee1.0 #coffee #pics #tasskaff #coffeediary #smkh #dailycoffee http:\/\/t.co\/ks8i92krK1","source":"\u003ca href=\"http:\/\/instagram.com\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":5402272,"id_str":"5402272","name":"oliver kreimer","screen_name":"011i","location":"Hameln, Germany","description":"#coffee #kids #computerscience #photography #biking","url":"http:\/\/t.co\/BXWfd1Nj9h","entities":{"url":{"urls":[{"url":"http:\/\/t.co\/BXWfd1Nj9h","expanded_url":"http:\/\/nullenundeinsenschubser.de","display_url":"nullenundeinsenschubser.de","indices":[0,22]}]},"description":{"urls":[]}},"protected":false,"followers_count":491,"friends_count":788,"listed_count":38,"created_at":"Sun Apr 22 14:31:06 +0000 2007","favourites_count":6289,"utc_offset":3600,"time_zone":"Berlin","geo_enabled":true,"verified":false,"statuses_count":15542,"lang":"de","contributors_enabled":false,"is_translator":false,"profile_background_color":"6E6868","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/5402272\/1355478803","profile_link_color":"243964","profile_sidebar_border_color":"948D7B","profile_sidebar_fill_color":"5888EB","profile_text_color":"000000","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[{"text":"kaffee1","indices":[0,8]},{"text":"coffee","indices":[11,18]},{"text":"pics","indices":[19,24]},{"text":"tasskaff","indices":[25,34]},{"text":"coffeediary","indices":[35,47]},{"text":"smkh","indices":[48,53]},{"text":"dailycoffee","indices":[54,66]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/ks8i92krK1","expanded_url":"http:\/\/instagram.com\/p\/bAl8P3yfHW\/","display_url":"instagram.com\/p\/bAl8P3yfHW\/","indices":[67,89]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},{"metadata":{"result_type":"recent","iso_language_code":"de"},"created_at":"Tue Jun 25 13:57:51 +0000 2013","id":349526857881882625,"id_str":"349526857881882625","text":"Earlier today: Flat White with @ailine #coffeediary @ R\u00f6stst\u00e4tte http:\/\/t.co\/xQTAXL4qFU","source":"\u003ca href=\"http:\/\/instagram.com\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":24479611,"id_str":"24479611","name":"Sebastian Waters","screen_name":"sebastianwaters","location":"Berlin","description":"User Experience Designer \/ Information Architect, Co-Founder of supernov.ae, Contributor to @DMIG & @siteswelike","url":"http:\/\/t.co\/uvpIVrAgxk","entities":{"url":{"urls":[{"url":"http:\/\/t.co\/uvpIVrAgxk","expanded_url":"http:\/\/www.sebastianwaters.com","display_url":"sebastianwaters.com","indices":[0,22]}]},"description":{"urls":[]}},"protected":false,"followers_count":1351,"friends_count":391,"listed_count":54,"created_at":"Sun Mar 15 03:24:57 +0000 2009","favourites_count":5384,"utc_offset":3600,"time_zone":"Berlin","geo_enabled":true,"verified":false,"statuses_count":22155,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"022330","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme15\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme15\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3529955269\/0a49735e70e4d804ddaa814ef4ae17b3_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3529955269\/0a49735e70e4d804ddaa814ef4ae17b3_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/24479611\/1366105227","profile_link_color":"0084B4","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"FFF7CC","profile_text_color":"0C3E53","profile_use_background_image":false,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":{"type":"Point","coordinates":[52.529113,13.397711]},"coordinates":{"type":"Point","coordinates":[13.397711,52.529113]},"place":{"id":"3078869807f9dd36","url":"http:\/\/api.twitter.com\/1\/geo\/id\/3078869807f9dd36.json","place_type":"city","name":"Berlin","full_name":"Berlin, Berlin","country_code":"DE","country":"Germany","bounding_box":{"type":"Polygon","coordinates":[[[13.088303999999999,52.338079],[13.760909,52.338079],[13.760909,52.675323],[13.088303999999999,52.675323]]]},"attributes":{}},"contributors":null,"retweet_count":0,"favorite_count":1,"entities":{"hashtags":[{"text":"coffeediary","indices":[39,51]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/xQTAXL4qFU","expanded_url":"http:\/\/instagram.com\/p\/a-xYSMxOlP\/","display_url":"instagram.com\/p\/a-xYSMxOlP\/","indices":[65,87]}],"user_mentions":[{"screen_name":"ailine","name":"Ailine Liefeld","id":15747756,"id_str":"15747756","indices":[31,38]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"metadata":{"result_type":"recent","iso_language_code":"de"},"created_at":"Tue Jun 25 04:50:07 +0000 2013","id":349389018473050114,"id_str":"349389018473050114","text":"#kaffee1.0 #coffee #pics #tasskaff #coffeediary #smkh #dailycoffee @ b\u00e4ckerei deiterding http:\/\/t.co\/3SR5tliTNP","source":"\u003ca href=\"http:\/\/instagram.com\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":5402272,"id_str":"5402272","name":"oliver kreimer","screen_name":"011i","location":"Hameln, Germany","description":"#coffee #kids #computerscience #photography #biking","url":"http:\/\/t.co\/BXWfd1Nj9h","entities":{"url":{"urls":[{"url":"http:\/\/t.co\/BXWfd1Nj9h","expanded_url":"http:\/\/nullenundeinsenschubser.de","display_url":"nullenundeinsenschubser.de","indices":[0,22]}]},"description":{"urls":[]}},"protected":false,"followers_count":491,"friends_count":788,"listed_count":38,"created_at":"Sun Apr 22 14:31:06 +0000 2007","favourites_count":6289,"utc_offset":3600,"time_zone":"Berlin","geo_enabled":true,"verified":false,"statuses_count":15542,"lang":"de","contributors_enabled":false,"is_translator":false,"profile_background_color":"6E6868","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/5402272\/1355478803","profile_link_color":"243964","profile_sidebar_border_color":"948D7B","profile_sidebar_fill_color":"5888EB","profile_text_color":"000000","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":{"type":"Point","coordinates":[52.13038741,9.24720903]},"coordinates":{"type":"Point","coordinates":[9.24720903,52.13038741]},"place":{"id":"c7c87475904f3037","url":"http:\/\/api.twitter.com\/1\/geo\/id\/c7c87475904f3037.json","place_type":"city","name":"Hessisch Oldendorf","full_name":"Hessisch Oldendorf, Hameln-Pyrmont","country_code":"DE","country":"Germany","bounding_box":{"type":"Polygon","coordinates":[[[9.156,52.094006],[9.387540999999999,52.094006],[9.387540999999999,52.220873999999995],[9.156,52.220873999999995]]]},"attributes":{}},"contributors":null,"retweet_count":0,"favorite_count":1,"entities":{"hashtags":[{"text":"kaffee1","indices":[0,8]},{"text":"coffee","indices":[11,18]},{"text":"pics","indices":[19,24]},{"text":"tasskaff","indices":[25,34]},{"text":"coffeediary","indices":[35,47]},{"text":"smkh","indices":[48,53]},{"text":"dailycoffee","indices":[54,66]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/3SR5tliTNP","expanded_url":"http:\/\/instagram.com\/p\/a-BlbTyfK5\/","display_url":"instagram.com\/p\/a-BlbTyfK5\/","indices":[89,111]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"de"},{"metadata":{"result_type":"recent","iso_language_code":"en"},"created_at":"Mon Jun 24 04:54:32 +0000 2013","id":349027739510116353,"id_str":"349027739510116353","text":"RT @011i: #kaffee1.0 #coffee #pics #tasskaff #coffeediary #smkh #dailycoffee http:\/\/t.co\/fNrWe0V5NS","source":"\u003ca href=\"https:\/\/twitter.com\/coffeers\" rel=\"nofollow\"\u003ecoffeers\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1262960174,"id_str":"1262960174","name":"coffee lovers","screen_name":"coffeers","location":"","description":"","url":null,"entities":{"description":{"urls":[]}},"protected":false,"followers_count":3121,"friends_count":0,"listed_count":42,"created_at":"Tue Mar 12 21:55:18 +0000 2013","favourites_count":0,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":98216,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3386217165\/314887eafa9cf0cf2d4ba229156992b3_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3386217165\/314887eafa9cf0cf2d4ba229156992b3_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"metadata":{"result_type":"recent","iso_language_code":"en"},"created_at":"Mon Jun 24 04:38:15 +0000 2013","id":349023641448628224,"id_str":"349023641448628224","text":"#kaffee1.0 #coffee #pics #tasskaff #coffeediary #smkh #dailycoffee http:\/\/t.co\/fNrWe0V5NS","source":"\u003ca href=\"http:\/\/instagram.com\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":5402272,"id_str":"5402272","name":"oliver kreimer","screen_name":"011i","location":"Hameln, Germany","description":"#coffee #kids #computerscience #photography #biking","url":"http:\/\/t.co\/BXWfd1Nj9h","entities":{"url":{"urls":[{"url":"http:\/\/t.co\/BXWfd1Nj9h","expanded_url":"http:\/\/nullenundeinsenschubser.de","display_url":"nullenundeinsenschubser.de","indices":[0,22]}]},"description":{"urls":[]}},"protected":false,"followers_count":491,"friends_count":788,"listed_count":38,"created_at":"Sun Apr 22 14:31:06 +0000 2007","favourites_count":6289,"utc_offset":3600,"time_zone":"Berlin","geo_enabled":true,"verified":false,"statuses_count":15542,"lang":"de","contributors_enabled":false,"is_translator":false,"profile_background_color":"6E6868","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/5402272\/1355478803","profile_link_color":"243964","profile_sidebar_border_color":"948D7B","profile_sidebar_fill_color":"5888EB","profile_text_color":"000000","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":1,"favorite_count":0,"entities":{"hashtags":[{"text":"kaffee1","indices":[0,8]},{"text":"coffee","indices":[11,18]},{"text":"pics","indices":[19,24]},{"text":"tasskaff","indices":[25,34]},{"text":"coffeediary","indices":[35,47]},{"text":"smkh","indices":[48,53]},{"text":"dailycoffee","indices":[54,66]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/fNrWe0V5NS","expanded_url":"http:\/\/instagram.com\/p\/a7bbLDyfLq\/","display_url":"instagram.com\/p\/a7bbLDyfLq\/","indices":[67,89]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},"retweet_count":1,"favorite_count":0,"entities":{"hashtags":[{"text":"kaffee1","indices":[10,18]},{"text":"coffee","indices":[21,28]},{"text":"pics","indices":[29,34]},{"text":"tasskaff","indices":[35,44]},{"text":"coffeediary","indices":[45,57]},{"text":"smkh","indices":[58,63]},{"text":"dailycoffee","indices":[64,76]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/fNrWe0V5NS","expanded_url":"http:\/\/instagram.com\/p\/a7bbLDyfLq\/","display_url":"instagram.com\/p\/a7bbLDyfLq\/","indices":[77,99]}],"user_mentions":[{"screen_name":"011i","name":"oliver kreimer","id":5402272,"id_str":"5402272","indices":[3,8]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},{"metadata":{"result_type":"recent","iso_language_code":"en"},"created_at":"Mon Jun 24 04:38:15 +0000 2013","id":349023641448628224,"id_str":"349023641448628224","text":"#kaffee1.0 #coffee #pics #tasskaff #coffeediary #smkh #dailycoffee http:\/\/t.co\/fNrWe0V5NS","source":"\u003ca href=\"http:\/\/instagram.com\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":5402272,"id_str":"5402272","name":"oliver kreimer","screen_name":"011i","location":"Hameln, Germany","description":"#coffee #kids #computerscience #photography #biking","url":"http:\/\/t.co\/BXWfd1Nj9h","entities":{"url":{"urls":[{"url":"http:\/\/t.co\/BXWfd1Nj9h","expanded_url":"http:\/\/nullenundeinsenschubser.de","display_url":"nullenundeinsenschubser.de","indices":[0,22]}]},"description":{"urls":[]}},"protected":false,"followers_count":491,"friends_count":788,"listed_count":38,"created_at":"Sun Apr 22 14:31:06 +0000 2007","favourites_count":6289,"utc_offset":3600,"time_zone":"Berlin","geo_enabled":true,"verified":false,"statuses_count":15542,"lang":"de","contributors_enabled":false,"is_translator":false,"profile_background_color":"6E6868","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/18162319\/013d2.jpg","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/3639187245\/004dd88961b270f1b93956217c0dc1c2_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/5402272\/1355478803","profile_link_color":"243964","profile_sidebar_border_color":"948D7B","profile_sidebar_fill_color":"5888EB","profile_text_color":"000000","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":1,"favorite_count":0,"entities":{"hashtags":[{"text":"kaffee1","indices":[0,8]},{"text":"coffee","indices":[11,18]},{"text":"pics","indices":[19,24]},{"text":"tasskaff","indices":[25,34]},{"text":"coffeediary","indices":[35,47]},{"text":"smkh","indices":[48,53]},{"text":"dailycoffee","indices":[54,66]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/fNrWe0V5NS","expanded_url":"http:\/\/instagram.com\/p\/a7bbLDyfLq\/","display_url":"instagram.com\/p\/a7bbLDyfLq\/","indices":[67,89]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},{"metadata":{"result_type":"recent","iso_language_code":"en"},"created_at":"Mon Jun 24 04:00:20 +0000 2013","id":349014100828889088,"id_str":"349014100828889088","text":"Photo: coffeediary: #vscocam #vscofeature #coffeethogo #coffeediary #coffee #flatwhite #hamburg #welovehh... http:\/\/t.co\/lNYQwhEg1k","source":"\u003ca href=\"http:\/\/www.tumblr.com\/\" rel=\"nofollow\"\u003eTumblr\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":7164732,"id_str":"7164732","name":"Jandy Jean","screen_name":"JandyJean","location":"Singapore","description":"I spazz Super Junior and Beast! http:\/\/t.co\/l62yuSbZ5D http:\/\/t.co\/5FjOytZuMD","url":"http:\/\/t.co\/3mMeERavC4","entities":{"url":{"urls":[{"url":"http:\/\/t.co\/3mMeERavC4","expanded_url":"http:\/\/jandyjean.tumblr.com","display_url":"jandyjean.tumblr.com","indices":[0,22]}]},"description":{"urls":[{"url":"http:\/\/t.co\/l62yuSbZ5D","expanded_url":"http:\/\/jandyjean.blogspot.sg","display_url":"jandyjean.blogspot.sg","indices":[32,54]},{"url":"http:\/\/t.co\/5FjOytZuMD","expanded_url":"http:\/\/about.me\/jandy.jean","display_url":"about.me\/jandy.jean","indices":[55,77]}]}},"protected":false,"followers_count":345,"friends_count":92,"listed_count":17,"created_at":"Sat Jun 30 02:28:02 +0000 2007","favourites_count":4,"utc_offset":28800,"time_zone":"Singapore","geo_enabled":false,"verified":false,"statuses_count":33865,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"FFFFFF","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/155409525\/twitter_bg_new.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/155409525\/twitter_bg_new.png","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1415178815\/twitterdp_normal.JPG","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1415178815\/twitterdp_normal.JPG","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/7164732\/1347985384","profile_link_color":"E3B10D","profile_sidebar_border_color":"E3B10D","profile_sidebar_fill_color":"000000","profile_text_color":"F57A08","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[{"text":"vscocam","indices":[20,28]},{"text":"vscofeature","indices":[29,41]},{"text":"coffeethogo","indices":[42,54]},{"text":"coffeediary","indices":[55,67]},{"text":"coffee","indices":[68,75]},{"text":"flatwhite","indices":[76,86]},{"text":"hamburg","indices":[87,95]},{"text":"welovehh","indices":[96,105]}],"symbols":[],"urls":[{"url":"http:\/\/t.co\/lNYQwhEg1k","expanded_url":"http:\/\/tmblr.co\/ZNaDAyo2dFPa","display_url":"tmblr.co\/ZNaDAyo2dFPa","indices":[109,131]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"}],"search_metadata":{"completed_in":0.027,"max_id":350469335690645504,"max_id_str":"350469335690645504","next_results":"?max_id=349014100828889087&q=%25coffeediary%20filter%3Alinks&count=10&include_entities=1&result_type=recent","query":"%25coffeediary+filter%3Alinks","refresh_url":"?since_id=350469335690645504&q=%25coffeediary%20filter%3Alinks&result_type=recent&include_entities=1","count":10,"since_id":0,"since_id_str":"0"}}
data/tweetlr.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "tweetlr"
3
- s.version = "0.1.23"
3
+ s.version = "0.1.30"
4
4
  s.author = "Sven Kraeuter"
5
5
  s.email = "sven.kraeuter@gmail.com"
6
6
  s.homepage = "http://tweetlr.5v3n.com"
@@ -16,12 +16,14 @@ Gem::Specification.new do |s|
16
16
  s.add_dependency "json", ">= 1.7.7"
17
17
  s.add_dependency "nokogiri"
18
18
  s.add_dependency "oauth"
19
+ s.add_dependency "twitter"
19
20
 
20
21
  s.add_development_dependency "rake"
21
22
  s.add_development_dependency "rspec"
22
23
  s.add_development_dependency "rdoc"
23
24
  s.add_development_dependency "simplecov"
24
25
  s.add_development_dependency "coveralls"
26
+ s.add_development_dependency "fakeweb", ["~> 1.3"]
25
27
 
26
28
  s.files = `git ls-files`.split("\n")
27
29
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tweetlr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.23
4
+ version: 0.1.30
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-03 00:00:00.000000000 Z
12
+ date: 2013-06-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: daemons
@@ -107,6 +107,22 @@ dependencies:
107
107
  - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: twitter
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
110
126
  - !ruby/object:Gem::Dependency
111
127
  name: rake
112
128
  requirement: !ruby/object:Gem::Requirement
@@ -187,6 +203,22 @@ dependencies:
187
203
  - - ! '>='
188
204
  - !ruby/object:Gem::Version
189
205
  version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: fakeweb
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ~>
212
+ - !ruby/object:Gem::Version
213
+ version: '1.3'
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ~>
220
+ - !ruby/object:Gem::Version
221
+ version: '1.3'
190
222
  description: tweetlr crawls twitter for a given term, extracts photos out of the collected
191
223
  tweets' short urls and posts the images to tumblr.
192
224
  email: sven.kraeuter@gmail.com
@@ -223,6 +255,7 @@ files:
223
255
  - spec/processors/tumblr_processor_spec.rb
224
256
  - spec/processors/twitter_processor_spec.rb
225
257
  - spec/spec_helper.rb
258
+ - spec/support/fixtures/twitter_search_api_response.json
226
259
  - tweetlr.gemspec
227
260
  homepage: http://tweetlr.5v3n.com
228
261
  licenses: []
@@ -236,12 +269,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
236
269
  - - ! '>='
237
270
  - !ruby/object:Gem::Version
238
271
  version: '0'
272
+ segments:
273
+ - 0
274
+ hash: -4221572964862274532
239
275
  required_rubygems_version: !ruby/object:Gem::Requirement
240
276
  none: false
241
277
  requirements:
242
278
  - - ! '>='
243
279
  - !ruby/object:Gem::Version
244
280
  version: '0'
281
+ segments:
282
+ - 0
283
+ hash: -4221572964862274532
245
284
  requirements: []
246
285
  rubyforge_project: tweetlr
247
286
  rubygems_version: 1.8.25
@@ -257,3 +296,4 @@ test_files:
257
296
  - spec/processors/tumblr_processor_spec.rb
258
297
  - spec/processors/twitter_processor_spec.rb
259
298
  - spec/spec_helper.rb
299
+ - spec/support/fixtures/twitter_search_api_response.json