embulk-plugin-twitterstream 0.0.1

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: add26419b4ae29992705f6d30f3d8c668cdb64ce
4
+ data.tar.gz: b28e1559c7e6e95b8f47a446584c635dcf50fb81
5
+ SHA512:
6
+ metadata.gz: 2bf1266efe1988b791fcbee980896576414d9f1b9e31a6c69285889843148e29b15fcf7bef4ff312b50e9c70d63cb5f83862ae83310e7b816bce0d7a2579f2cc
7
+ data.tar.gz: 8ea781ebf0b26d7ed2f1c67979f44ed5ebb40405c065f2cd3b221a497bc054a06227366552ce848ada7778731287ca1137196ccdbfddc7e7db3ec98a71642dd5
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+ gemspec
3
+
4
+ gem 'twitter'
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # Embulk plugin for Twitter Stream input
2
+
3
+ This [Embulk](https://github.com/embulk/embulk) plugin read records from Twitter Stream!
4
+
5
+ ## Configuration
6
+
7
+ ```yaml
8
+ exec: {}
9
+ in:
10
+ type: twitterstream
11
+ consumer_key: XXXXXXXXXXXXXXXXXXXXXX
12
+ consumer_secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
13
+ access_token: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
14
+ access_token_secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
15
+ count: 3
16
+ columns:
17
+ - id_str
18
+ - name
19
+ - user.screen_name
20
+ out: {type: stdout}
21
+ ```
22
+
23
+ `count` and `columns` are omittable.
24
+
25
+ ## License
26
+
27
+ MIT
28
+
29
+ ## Author
30
+
31
+ Yasuhiro Matsumoto (a.k.a mattn)
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ task :default => [:build]
@@ -0,0 +1,21 @@
1
+
2
+ Gem::Specification.new do |gem|
3
+ gem.name = "embulk-plugin-twitterstream"
4
+ gem.version = "0.0.1"
5
+
6
+ gem.summary = %q{Embulk plugin for TwitterStream input}
7
+ gem.description = gem.summary
8
+ gem.authors = ["Yasuhiro Matsumoto"]
9
+ gem.email = ["mattn.jp@gmail.com"]
10
+ gem.license = "MIT"
11
+ gem.homepage = "https://github.com/mattn/embulk-plugin-twitterstream"
12
+
13
+ gem.files = `git ls-files`.split("\n") + Dir["classpath/*.jar"]
14
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
+ gem.require_paths = ["lib"]
16
+ gem.has_rdoc = false
17
+
18
+ gem.add_development_dependency 'twitter', ['>= 5.13.0']
19
+ gem.add_development_dependency 'bundler', ['~> 1.0']
20
+ gem.add_development_dependency 'rake', ['>= 0.9.2']
21
+ end
@@ -0,0 +1,119 @@
1
+ require 'twitter'
2
+ require 'json'
3
+
4
+ module Embulk
5
+ class StopStreamException < Exception; end
6
+
7
+ class InputTwitterStream < InputPlugin
8
+ Plugin.register_input('twitterstream', self)
9
+
10
+ COLUMN_NAMES = [
11
+ 'text',
12
+ 'created_at',
13
+ 'id_str',
14
+ 'user.follow_request_sent',
15
+ 'user.following',
16
+ 'user.time_zone',
17
+ 'user.created_at',
18
+ 'user.profile_sidebar_fill_color',
19
+ 'user.profile_image_url',
20
+ 'user.default_profile',
21
+ 'user.geo_enabled',
22
+ 'user.profile_sidebar_border_color',
23
+ 'user.is_translator',
24
+ 'user.url',
25
+ 'user.profile_image_url_https',
26
+ 'user.description',
27
+ 'user.listed_count',
28
+ 'user.profile_use_background_image',
29
+ 'user.friends_count',
30
+ 'user.followers_count',
31
+ 'user.profile_text_color',
32
+ 'user.profile_background_image_url',
33
+ 'user.location',
34
+ 'user.profile_link_color',
35
+ 'user.protected',
36
+ 'user.default_profile_image',
37
+ 'user.lang',
38
+ 'user.statuses_count',
39
+ 'user.verified',
40
+ 'user.name',
41
+ 'user.id_str',
42
+ 'user.show_all_inline_media',
43
+ 'user.contributors_enabled',
44
+ 'user.notifications',
45
+ 'user.profile_background_image_url_https',
46
+ 'user.profile_background_color',
47
+ 'user.id',
48
+ 'user.profile_background_tile',
49
+ 'user.utc_offset',
50
+ 'user.favourites_count',
51
+ 'user.screen_name',
52
+ 'in_reply_to_user_id',
53
+ 'id',
54
+ 'contributors',
55
+ 'truncated'
56
+ ]
57
+
58
+ def self.transaction(config, &control)
59
+ task = config
60
+ threads = 1
61
+ cols = config.param('columns', :array)
62
+ if cols.empty?
63
+ columns = COLUMN_NAMES.map.with_index {|column, index|
64
+ Column.new(index, column, :string)
65
+ }
66
+ else
67
+ columns = config.param('columns', :array).map.with_index { |column, index|
68
+ Column.new(i, column, :string)
69
+ }
70
+ end
71
+ commit_reports = yield(task, columns, threads)
72
+ return {}
73
+ end
74
+
75
+ def initialize(task, schema, index, page_builder)
76
+ super
77
+ end
78
+
79
+ def dot_flatten(hash, path = '')
80
+ hash.each_with_object({}) do |(k, v), ret|
81
+ key = path + k.to_s
82
+ if v.is_a? Hash
83
+ ret.merge! dot_flatten(v, key + '.')
84
+ else
85
+ ret[key] = v
86
+ end
87
+ end
88
+ end
89
+
90
+ def run
91
+ client = Twitter::Streaming::Client.new(
92
+ consumer_key: @task['consumer_key'],
93
+ consumer_secret: @task['consumer_secret'],
94
+ access_token: @task['access_token'],
95
+ access_token_secret: @task['access_token_secret'],
96
+ )
97
+ count = @task['count'] ? @task['count'].to_i : 0
98
+ begin
99
+ client.user do |item|
100
+ case item
101
+ when Twitter::Tweet
102
+ tweet = dot_flatten(item.to_hash)
103
+ @page_builder.add(@schema.map {|column| tweet.has_key?(column.name) ? tweet[column.name].to_s : ''})
104
+ if count > 0
105
+ count -= 1
106
+ if count == 0
107
+ raise StopStreamException if count == 0
108
+ end
109
+ end
110
+ end
111
+ end
112
+ rescue StopStreamException
113
+ end
114
+ @page_builder.finish
115
+ commit_report = {}
116
+ return commit_report
117
+ end
118
+ end
119
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: embulk-plugin-twitterstream
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Yasuhiro Matsumoto
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: twitter
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.13.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 5.13.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.9.2
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.9.2
55
+ description: Embulk plugin for TwitterStream input
56
+ email:
57
+ - mattn.jp@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - Gemfile
63
+ - README.md
64
+ - Rakefile
65
+ - embulk-plugin-twitterstream.gemspec
66
+ - lib/embulk/input_twitterstream.rb
67
+ homepage: https://github.com/mattn/embulk-plugin-twitterstream
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubyforge_project:
87
+ rubygems_version: 2.4.5
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: Embulk plugin for TwitterStream input
91
+ test_files: []