tweetlr 0.1.30 → 0.1.31

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 43c43131be99dbefe75e59be26c48610b9df831e
4
+ data.tar.gz: f87693e3449bc9d4731fa72a2337cd42b2398921
5
+ SHA512:
6
+ metadata.gz: 49305bef5f776635ace156f2b3f09434fb346dd1e5c8bf06180f1e523c965ba1d965b5be7c791504f39831b6877afcb6753f23c857b67ebb2183448b2df90c15
7
+ data.tar.gz: dc07d13addc0122f0b1cf57940f82cab5b582110d0ff0710a1186bddcee5698d794e4bbd90d2aaf88a8f3d85ba41f238e248b40662cb32dd0b8f8add8d013a7b
data/README.md CHANGED
@@ -3,6 +3,9 @@
3
3
  <a href="http://travis-ci.org/#!/5v3n/tweetlr">![travis-ci](https://api.travis-ci.org/5v3n/tweetlr.png?branch=master)</a>&nbsp;
4
4
  <a href="https://codeclimate.com/github/5v3n/tweetlr"><img src="https://codeclimate.com/github/5v3n/tweetlr.png" /></a>&nbsp;
5
5
  <a href='https://coveralls.io/r/5v3n/tweetlr'><img src='https://coveralls.io/repos/5v3n/tweetlr/badge.png?branch=master' alt='Coverage Status' /></a>
6
+ <br/>
7
+ Your chance to contrubute: [![Stories in Ready](https://badge.waffle.io/5v3n/tweetlr.png)](http://waffle.io/5v3n/tweetlr)
8
+
6
9
 
7
10
 
8
11
 
@@ -22,7 +25,6 @@ tweetlr supports
22
25
  - foursquare
23
26
  - path.com
24
27
  - twitpic
25
- - yfrog
26
28
  - imgly
27
29
  - eyeem.com
28
30
  - t.co shortened links to pictures
data/bin/tweetlr CHANGED
@@ -51,6 +51,10 @@ module Tweetlr
51
51
  :tumblr_blog_hostname => config['tumblr_blog_hostname'],
52
52
  :tumblr_oauth_access_token_key => config['tumblr_oauth_access_token_key'],
53
53
  :tumblr_oauth_access_token_secret => config['tumblr_oauth_access_token_secret'],
54
+ twitter_app_consumer_key: config['twitter_app_consumer_key'],
55
+ twitter_app_consumer_secret: config['twitter_app_consumer_secret'],
56
+ twitter_oauth_token: config['twitter_oauth_token'],
57
+ twitter_oauth_token_secret: config['twitter_oauth_token_secret'],
54
58
  :whitelist => config['whitelist'],
55
59
  :shouts => config['shouts'],
56
60
  :since_id => config['start_at_tweet_id'] ,
@@ -62,7 +66,7 @@ module Tweetlr
62
66
  :results_per_page => config['results_per_page'],
63
67
  :result_type => config['result_type'],
64
68
  :embedly_key => config['embedly_key']
65
- }
69
+ }.merge(config)
66
70
  end
67
71
  end
68
72
  end
@@ -124,16 +124,18 @@ module Tweetlr::Processors
124
124
  private
125
125
  def self.process_link(link, embedly_key)
126
126
  url = nil
127
- url = image_url_eyeem link if link.index 'eyeem.com'
128
- url = image_url_instagram link if (link.index('instagr.am') || link.index('instagram.com'))
129
- url = image_url_twitpic link if link.index 'twitpic'
130
- url = image_url_yfrog link if link.index 'yfrog'
131
- url = image_url_imgly link, embedly_key if link.index 'img.ly'
132
- url = image_url_tco link, embedly_key if link.index 't.co'
133
- url = image_url_twimg link if link.index 'twitter.com'
134
- url = image_url_path link if link.index 'path.com'
135
- url = image_url_foursqaure link if (link.index('4sq.com') || link.index('foursquare.com'))
136
- url = image_url_embedly link, embedly_key if url.nil? #just try embed.ly for anything else. could do all image url processing w/ embedly, but there's probably some kind of rate limit invovled.
127
+ url = image_url_embedly link, embedly_key
128
+ if url.nil? #fallback to self written image extractors
129
+ url = image_url_eyeem link if link.index 'eyeem.com'
130
+ url = image_url_instagram link if (link.index('instagr.am') || link.index('instagram.com'))
131
+ url = image_url_twitpic link if link.index 'twitpic'
132
+ url = image_url_yfrog link if link.index 'yfrog'
133
+ url = image_url_imgly link, embedly_key if link.index 'img.ly'
134
+ url = image_url_tco link, embedly_key if link.index 't.co'
135
+ url = image_url_twimg link if link.index 'twitter.com'
136
+ url = image_url_path link if link.index 'path.com'
137
+ url = image_url_foursqaure link if (link.index('4sq.com') || link.index('foursquare.com'))
138
+ end
137
139
  url
138
140
  end
139
141
  def self.process_reponse_header(resp, stop_indicator)
@@ -38,7 +38,8 @@ module Tweetlr::Processors
38
38
  log.debug "#{self}::lazy_search called with config #{config}"
39
39
  response = nil
40
40
  if config
41
- search_call = "#{config['search_term'].gsub('+', ' OR ')} filter:links"
41
+ search_term = config['search_term'] || config[:search_term] || config['terms'] || config[:terms]
42
+ search_call = "#{search_term.gsub('+', ' OR ')} filter:links"
42
43
  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
44
  response = self.call_twitter_api(search_call, config, :lazy)
44
45
  else
@@ -48,25 +49,14 @@ module Tweetlr::Processors
48
49
  end
49
50
  private
50
51
  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
52
+ apply_twitter_api_configuration config
57
53
  max_attempts = 3
58
54
  num_attempts = 0
59
55
  begin
60
56
  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
57
+ call_twitter_with search_call, config, lazy
66
58
  rescue ::Twitter::Error::TooManyRequests => error
67
59
  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
60
  sleep error.rate_limit.reset_in
71
61
  retry
72
62
  else
@@ -74,5 +64,21 @@ private
74
64
  end
75
65
  end
76
66
  end
67
+ def self.apply_twitter_api_configuration(config)
68
+ ::Twitter.configure do |configuration|
69
+ configuration.consumer_key = config[:twitter_app_consumer_key]
70
+ configuration.consumer_secret = config[:twitter_app_consumer_secret]
71
+ configuration.oauth_token = config[:twitter_oauth_token]
72
+ configuration.oauth_token_secret = config[:twitter_oauth_token_secret]
73
+ end
74
+ end
75
+ def self.call_twitter_with(search_call, config, lazy)
76
+ if lazy
77
+ response = ::Twitter.search(search_call, :since_id => config['since_id'] || config[:since_id], :count => config[:results_per_page], :result_type => config[:result_type])
78
+ else
79
+ response = ::Twitter.search(search_call, :count => config[:results_per_page], :result_type => config[:result_type])
80
+ end
81
+ response
82
+ end
77
83
  end
78
84
  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.30'
5
+ VERSION = '0.1.31'
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,13 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  describe Tweetlr::Core do
4
4
 
5
- config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml.dev')
5
+ config_file = File.join( Dir.pwd, 'config', TWEETLR_CONFIG_FILE)
6
6
  config = YAML.load_file(config_file)
7
7
  TIMESTAMP = config['twitter_timestamp']
8
8
  WHITELIST = config['whitelist']
9
9
 
10
10
  before :all do
11
- config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml.dev')
11
+ config_file = File.join( Dir.pwd, 'config', TWEETLR_CONFIG_FILE)
12
12
  config = YAML.load_file(config_file)
13
13
  @tweetlr_config = config
14
14
  end
@@ -8,8 +8,7 @@ describe Tweetlr::Processors::PhotoService do
8
8
  :path => 'http://path.com/p/KQd57',
9
9
  :instagram => "http://instagr.am/p/DzCWn/",
10
10
  :twitpic => "http://twitpic.com/449o2x",
11
- :yfrog => "http://yfrog.com/h4vlfp",
12
- :tco => 'http://t.co/MUGNayA',
11
+ :tco => 'http://t.co/FmyBGfyY',
13
12
  :embedly => 'http://flic.kr/p/973hTv',
14
13
  :twitter_pics => 'http://t.co/FmyBGfyY',
15
14
  :twimg => 'http://twitter.com/KSilbereisen/status/228035435237097472',
@@ -2,7 +2,7 @@ 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.dev')
5
+ config_file = File.join( Dir.pwd, 'config', TWEETLR_CONFIG_FILE)
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
8
  @tweetlr_config = config
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Tweetlr::Processors::Twitter do
4
4
  before :all do
5
- config_file = File.join( Dir.pwd, 'config', 'tweetlr.yml.dev')
5
+ config_file = File.join( Dir.pwd, 'config', TWEETLR_CONFIG_FILE)
6
6
  @twitter_config = YAML.load_file(config_file)
7
7
  end
8
8
  before :each do
@@ -13,12 +13,17 @@ describe Tweetlr::Processors::Twitter do
13
13
  end
14
14
  describe "#search(config)" do
15
15
  it "searches twitter for a given term" do
16
- #stub_twitter
17
16
  response = Tweetlr::Processors::Twitter::search @twitter_config
18
17
  tweets = response.statuses
19
18
  tweets.should be
20
19
  tweets.should_not be_empty
21
20
  end
21
+ it "copes with errors by retrying, not raising" do
22
+ ::Twitter.stub(:search).and_raise(::Twitter::Error::TooManyRequests)
23
+ Tweetlr::Processors::Twitter.stub!(:sleep) #releasing the sleep handbrake...
24
+ Tweetlr::Processors::Twitter.should_receive(:sleep) #called in rescue block
25
+ expect { Tweetlr::Processors::Twitter.call_twitter_api('mocky wocky',{})}.to_not raise_error(::Twitter::Error::TooManyRequests)
26
+ end
22
27
  end
23
28
  describe "#lazy_search(config)" do
24
29
  it "searches twitter for a given term" do
data/spec/spec_helper.rb CHANGED
@@ -20,10 +20,13 @@ Bundler.require :default, :development, :test
20
20
  logger = Logger.new('/dev/null')
21
21
  Tweetlr::LogAware.log = logger
22
22
 
23
+ TWEETLR_CONFIG_FILE = 'tweetlr.yml'
24
+
23
25
  FakeWeb.allow_net_connect = false
26
+ FakeWeb.allow_net_connect = %r[^https?://coveralls.io/api/v1/jobs]
24
27
  twitter_search_api_response = File.open("#{File.dirname(__FILE__)}/support/fixtures/twitter_search_api_response.json", 'rb') { |file| file.read }
25
28
  FakeWeb.register_uri(:get, %r|https://api.twitter.com/1.1/search/tweets.json|, :response => twitter_search_api_response)
26
-
29
+ FakeWeb.register_uri(:post, "https://@api.twitter.com/oauth2/token", response: Net::HTTPCreated.new("Created.", "201", true))
27
30
  def check_pic_url_extraction(service)
28
31
  image_url = Tweetlr::Processors::PhotoService.find_image_url @links[service]
29
32
  (image_url =~ Tweetlr::Processors::PhotoService::PIC_REGEXP).should be, "service #{service} not working, no picture extracted!"
@@ -1,22 +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
-
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
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.30"
3
+ s.version = "0.1.31"
4
4
  s.author = "Sven Kraeuter"
5
5
  s.email = "sven.kraeuter@gmail.com"
6
6
  s.homepage = "http://tweetlr.5v3n.com"
@@ -16,10 +16,10 @@ 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
+ s.add_dependency "twitter", "4.8.1"
20
20
 
21
21
  s.add_development_dependency "rake"
22
- s.add_development_dependency "rspec"
22
+ s.add_development_dependency "rspec", ["~> 2.13"]
23
23
  s.add_development_dependency "rdoc"
24
24
  s.add_development_dependency "simplecov"
25
25
  s.add_development_dependency "coveralls"
metadata CHANGED
@@ -1,212 +1,186 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tweetlr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.30
5
- prerelease:
4
+ version: 0.1.31
6
5
  platform: ruby
7
6
  authors:
8
7
  - Sven Kraeuter
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-28 00:00:00.000000000 Z
11
+ date: 2014-06-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: daemons
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: eventmachine
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: curb
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: json
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: 1.7.7
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: 1.7.7
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: nokogiri
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: oauth
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: twitter
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '='
116
102
  - !ruby/object:Gem::Version
117
- version: '0'
103
+ version: 4.8.1
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '='
124
109
  - !ruby/object:Gem::Version
125
- version: '0'
110
+ version: 4.8.1
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: rake
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - '>='
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - '>='
140
123
  - !ruby/object:Gem::Version
141
124
  version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: rspec
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - ~>
148
130
  - !ruby/object:Gem::Version
149
- version: '0'
131
+ version: '2.13'
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - ~>
156
137
  - !ruby/object:Gem::Version
157
- version: '0'
138
+ version: '2.13'
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: rdoc
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
- - - ! '>='
143
+ - - '>='
164
144
  - !ruby/object:Gem::Version
165
145
  version: '0'
166
146
  type: :development
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
- - - ! '>='
150
+ - - '>='
172
151
  - !ruby/object:Gem::Version
173
152
  version: '0'
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: simplecov
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
- - - ! '>='
157
+ - - '>='
180
158
  - !ruby/object:Gem::Version
181
159
  version: '0'
182
160
  type: :development
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
- - - ! '>='
164
+ - - '>='
188
165
  - !ruby/object:Gem::Version
189
166
  version: '0'
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: coveralls
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
- - - ! '>='
171
+ - - '>='
196
172
  - !ruby/object:Gem::Version
197
173
  version: '0'
198
174
  type: :development
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
- - - ! '>='
178
+ - - '>='
204
179
  - !ruby/object:Gem::Version
205
180
  version: '0'
206
181
  - !ruby/object:Gem::Dependency
207
182
  name: fakeweb
208
183
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
184
  requirements:
211
185
  - - ~>
212
186
  - !ruby/object:Gem::Version
@@ -214,7 +188,6 @@ dependencies:
214
188
  type: :development
215
189
  prerelease: false
216
190
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
191
  requirements:
219
192
  - - ~>
220
193
  - !ruby/object:Gem::Version
@@ -259,33 +232,26 @@ files:
259
232
  - tweetlr.gemspec
260
233
  homepage: http://tweetlr.5v3n.com
261
234
  licenses: []
235
+ metadata: {}
262
236
  post_install_message:
263
237
  rdoc_options: []
264
238
  require_paths:
265
239
  - lib
266
240
  required_ruby_version: !ruby/object:Gem::Requirement
267
- none: false
268
241
  requirements:
269
- - - ! '>='
242
+ - - '>='
270
243
  - !ruby/object:Gem::Version
271
244
  version: '0'
272
- segments:
273
- - 0
274
- hash: -4221572964862274532
275
245
  required_rubygems_version: !ruby/object:Gem::Requirement
276
- none: false
277
246
  requirements:
278
- - - ! '>='
247
+ - - '>='
279
248
  - !ruby/object:Gem::Version
280
249
  version: '0'
281
- segments:
282
- - 0
283
- hash: -4221572964862274532
284
250
  requirements: []
285
251
  rubyforge_project: tweetlr
286
- rubygems_version: 1.8.25
252
+ rubygems_version: 2.1.9
287
253
  signing_key:
288
- specification_version: 3
254
+ specification_version: 4
289
255
  summary: tweetlr crawls twitter for a given term, extracts photos out of the collected
290
256
  tweets' short urls and posts the images to tumblr.
291
257
  test_files: