embulk-plugin-twitterstream 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []