shopee 0.0.4 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fee05fa45486149f88eecf70a95026e06ee8f20b
4
- data.tar.gz: f9eacfd40a7e014908f719d6ebe1834b97b9ee60
3
+ metadata.gz: 22604eafa589c9f99893438843dc7310e33b0b73
4
+ data.tar.gz: 4360c0bb56b354ef5a3d84cd2fab2ab29776be66
5
5
  SHA512:
6
- metadata.gz: e0d30dca68612c2e27c16e57c3b0c7c38b1fb44b55a17dd190dcb930d457718ee4d1b1f3067bdfb3cc2f1358027ab5f4c8baa009befd237df59cf6909b9022ec
7
- data.tar.gz: adb0ae673f2f074d82d21f9581423ad5a14e99d82a50ed72f6de30c24293eed7d06a2aed5e12912c3e28034a6bd63dfc72416886285bfb3f84159780299e67f1
6
+ metadata.gz: 6af0698b3f83bdcc46085e144499e149e3374d6f7ba41c48e53efc1b807586c3e27482f7b13e577f79b1af3f6c809bdae2c22f92e620c713548043c2bfba1ed5
7
+ data.tar.gz: 8a8e6d28e15a1ae251cbc251e092db01ea0e76bf31c0243a8ac948a395a970fc734309e5d4cbb20a6c2fd2a3bf74bfa73d423bb8e25214633186e9a1fb58f37d
data/.gitignore CHANGED
@@ -1 +1,3 @@
1
1
  Gemfile.lock
2
+
3
+ *.gem
data/Gemfile CHANGED
@@ -5,6 +5,8 @@ gem 'json'
5
5
  gem 'minitest'
6
6
  gem 'vcr'
7
7
  gem 'webmock'
8
+ gem 'fuzzy-string-match'
9
+
8
10
  group :test do
9
11
  gem 'rake'
10
- end
12
+ end
data/README.md CHANGED
@@ -7,50 +7,243 @@ Scrape informations from
7
7
  [![Build Status](https://travis-ci.org/Smartibuy/shopee.svg?branch=master)](https://travis-ci.org/Smartibuy/shopee)
8
8
  [![Gem Version](https://badge.fury.io/rb/shopee.svg)](https://badge.fury.io/rb/shopee)
9
9
 
10
- ### Get started
11
- - Install packages
10
+ Get started
11
+ ==
12
+ ### Install ruby gem!
12
13
  ```
13
14
  $ gem install shopee
14
15
  ```
15
16
 
16
- - Run
17
+ ### Supported CLI
18
+
17
19
  ```
18
- $ shopee_titles
20
+ ## 1. List all categories of market of Mobile01
21
+ $ shopee allcate
22
+
23
+ ## 2. List top 30 goods by a category
24
+ $ shopee list [category_name]
25
+
26
+ ## 3. Find top 3 goods in a category by the keyword
27
+ $ shopee search [category_name] [keyword]
28
+
19
29
  ```
20
30
 
21
- - Usage
22
- ```ruby
23
- require 'shopee_scrap'
24
- scraper = ShopeeTileScrape::ShopeeTile.new
25
- category_arr = JSON.parse(scraper.titles)
26
31
 
27
- category_arr.each do |hash|
28
- puts "#{hash['title']} "
32
+ ### Usage
33
+ **1. List all categories of market of Mobile01**
34
+ ```ruby
35
+ require 'shopee'
36
+ shopeecate = ShopeeScrape::ShopeeListAll.new
37
+ category_arr shopeecate.get_categories
38
+ category_arr.each do |e|
39
+ puts e
29
40
  end
30
41
  ```
31
42
 
32
43
  - Expected output
33
44
  ```
34
- 女生衣著
35
- 男生衣著
36
- 女生包包與配件
37
- 男生包包與配件
38
- 女鞋
39
- 男鞋
40
- 3C相關
41
- 手機平板與周邊
42
- 居家生活
43
- 娛樂、收藏
44
- 代買代購
45
- 服務、票券
46
- 化妝、保養品
47
- 嬰幼童與母親
48
- 美食、伴手禮
49
- 寵物
50
- 戶外、運動
51
- 家電影音
52
- 電玩遊戲相關
53
- 其他類別
45
+ 電腦資訊
46
+ 桌上型電腦
47
+ 核心組件
48
+ 儲存裝置
49
+ 顯示設備
50
+ 網路設備
51
+ 電腦周邊設備
52
+ 機殼、散熱與電源
53
+ 電腦軟體與書籍
54
+ 耗材、線材與雜項
55
+ 筆記型電腦
56
+ 筆記型電腦周邊
57
+ 平板電腦
58
+ 蘋果電腦
59
+ 蘋果電腦周邊
60
+ 其它
61
+ 手持通訊
62
+ 手機
63
+ Android
64
+ iPhone
65
+ Windows Phone
66
+ 其他類型
67
+ 手機配件與吊飾
68
+ 家用電話
69
+ 傳真、影印與事務機
70
+ 通訊週邊與耗材
71
+ GPS
72
+ 攝影器材
73
+ 攝影機
74
+ 傳統底片相機
75
+ 消費級數位相機
76
+ 數位單眼相機
77
+ 相機其他周邊
78
+ 相機鏡頭
79
+ 攝影背包
80
+ 數位相機電池
81
+ 數位相機充電器
82
+ 記憶卡與行動相簿
83
+ 相片印表機與數位相框
84
+ 數位家電
85
+ 電視機
86
+ 音響與隨身聽
87
+ 影音設備周邊
88
+ 投影機與布幕
89
+ 生活小家電
90
+ 廚房小家電
91
+ 淨水設備
92
+ 健康與美容小家電
93
+ 冰箱
94
+ 洗衣與乾衣機
95
+ 冷氣空調
96
+ 休閒娛樂
97
+ 電玩主機
98
+ 電玩遊戲
99
+ 動漫電玩週邊
100
+ 電腦與線上遊戲
101
+ 懷舊童玩
102
+ 遙控模型
103
+ 金屬與鐵道模型
104
+ 益智遊戲
105
+ 玩具與模型
106
+ 書籍雜誌
107
+ 電視電影
108
+ 音樂歌曲
109
+ 生活用品
110
+ 名產美食
111
+ 運動健身綜合
112
+ 休閒旅遊
113
+ 鐘錶名品
114
+ 生活居家
115
+ 寵物用品
116
+ 汽車
117
+ 轎車、跑車
118
+ 休旅車
119
+ 貨車、其他車種
120
+ 汽車用品
121
+ 汽車精品
122
+ 美容清潔
123
+ 油品
124
+ 其他汽車用品
125
+ 影音設備
126
+ 汽車零件
127
+ 車燈
128
+ 輪胎、鋁圈
129
+ 底盤系統
130
+ 電機、冷卻系統
131
+ 煞車系統
132
+ 空力套件
133
+ 引擎、傳動與其它
134
+ 機車
135
+ 機車騎士用品
136
+ 機車用品
137
+ 機車零組件
138
+ 自行車
139
+ 公路車
140
+ 登山車
141
+ 小徑與摺疊車
142
+ 休閒與通勤車
143
+ 人身部品
144
+ 安全帽
145
+ 車衣、車褲
146
+ 其它人身部品
147
+ 自行車用品
148
+ 車燈、碼表
149
+ 收納袋、車袋
150
+ 清潔保養用品
151
+ 其它周邊配件
152
+ 自行車零件
153
+ 車架、前叉、避震器
154
+ 龍頭、車把
155
+ 煞車、變速系統零件
156
+ 輪組、內外胎
157
+ 座墊、座管
158
+ 其它車用零件
159
+ 男性時尚
160
+ 服飾與襯衫
161
+ 外套與夾克
162
+ 男用長短褲
163
+ 男用鞋與靴
164
+ 男性內衣褲襪
165
+ 男性飾品與配件
166
+ 女性流行
167
+ 彩妝與保養
168
+ 嬰幼童與母親
169
+ 流行女裝
170
+ 女性飾品與配件
171
+ 女鞋
172
+ 女性內衣
173
+ 代購與虛擬物品
174
+ 3C物品代購
175
+ 動漫電玩代購
176
+ 服飾配件代購
177
+ 其他物品代購
178
+ 手機門號/加值/預付卡
179
+ 遊戲點卡/虛寶
180
+ 票卷
181
+ 房屋地產
182
+ 北部地區
183
+ 中部地區
184
+ 南部地區
185
+ 東部與外島地區
186
+ ```
187
+
188
+
189
+ **2. List top 30 goods by a category**
190
+ ```ruby
191
+ require 'shopee'
192
+ ##Example :category is '電腦資訊'
193
+ category_name = '電腦資訊'
194
+ shopeecate = ShopeeScrape::ShopeeListGoodsByCate.new(category_name)
195
+ puts shopeecate.goods
196
+ ```
197
+
198
+ - Expected output
199
+ ```
200
+
201
+ ##Example : category is '電腦資訊'
202
+
203
+ {"name"=>"CM STORM SIRUS-C 天狼星 耳機麥克風 瞳(冰心淚) (60) 商品所在地:台北市", "price"=>" 3,500元", "num"=>"4", "update_time"=>"2015-11-15"}
204
+ {"name"=>"極新 Intel 535系列 240G M.2 SATA zounglun (14) 商品所在地:台北市", "price"=>" 7,500元", "num"=>"9", "update_time"=>"2015-11-15"}
205
+ {"name"=>"iPad mini2 16G 4G版 太空灰 夢幻之尊1 (7) 商品所在地:新竹市", "price"=>" 9,500元", "num"=>"3", "update_time"=>"2015-11-15"}
206
+ {"name"=>"IPad air 16G LTE timleetw1 (50) 商品所在地:新北市", "price"=>" 11,000元", "num"=>"0", "update_time"=>"2015-11-15"}
207
+ {"name"=>"Sony平版 Z3 Tablet Compacth LTE sim卡 by670917 (26) 商品所在地:基隆市", "price"=>"3,550元 4,000元", "num"=>"2", "update_time"=>"2015-11-15"}
208
+ {"name"=>"ASUS MB169B+ 外接式螢幕 ( 15.6 \") angel660209 (0) 商品所在地:新北市", "price"=>" 25,000元", "num"=>"1", "update_time"=>"2015-11-15"}
209
+ {"name"=>"2011 Apple MacBook Pro 13吋 /i5/16G/878GB hl_hl (5) 商品所在地:新北市", "price"=>" 12,000元", "num"=>"3", "update_time"=>"2015-11-15"}
210
+ {"name"=>"iPad Air Wi-Fi + Cellular(4G/LTE) 32GB 銀色 setry (1) 商品所在地:台北市", "price"=>" 38,000元", "num"=>"2", "update_time"=>"2015-11-15"}
211
+ {"name"=>"全新未拆 Macbook Pro Retina i5 2.7GHz/8G/128/2015年新款 daniel6060 (37) 商品所在地:台北市", "price"=>" 13,990元", "num"=>"0", "update_time"=>"2015-11-15"}
212
+ {"name"=>"SONY I5四核心執行續+8G大容量記憶體+獨顯1G+硬碟500G+藍光機+原廠充電器 安康-Mr.詹 (1) 商品所在地:新北市 (可交換商品)", "price"=>" 19,500元", "num"=>"0", "update_time"=>"2015-11-15"}
213
+ {"name"=>"104年7月購入 Surface 3 4gRam 128gRom 已貼玻璃貼附紅色鍵盤+觸控筆 baggio (25) 商品所在地:台北市", "price"=>" 1,700元", "num"=>"3", "update_time"=>"2015-11-15"}
214
+ {"name"=>"優派ViewSonic 19吋 VA1938wa-LED背光液晶 perryhsiao198... (1) 商品所在地:台北市", "price"=>"47,000元 48,800元", "num"=>"1", "update_time"=>"2015-11-15"}
215
+ {"name"=>"UX501JW-0352A4720HQ 512G SSD最高階版本 劉羿呈 (0) 商品所在地:新北市", "price"=>" 1,100元", "num"=>"0", "update_time"=>"2015-11-15"}
216
+ {"name"=>"電腦主機+Benq螢幕『內含系統與Office/適合小朋友使用 安康-Mr.詹 (1) 商品所在地:新北市 (可交換商品)", "price"=>"20,000元 21,000元", "num"=>"8", "update_time"=>"2015-11-15"}
217
+ {"name"=>"Lenovo T530 i7-3630QM真四核筆電 Rainbowsky (28) 商品所在地:宜蘭縣 (可交換商品)", "price"=>" 7,700元", "num"=>"2", "update_time"=>"2015-11-15"}
218
+ {"name"=>"Acer 4743G I5-520M/Win10/4G/SSD+320G HDD/GT540M獨顯/14... a82820a (9) 商品所在地:台北市", "price"=>" 80元", "num"=>"0", "update_time"=>"2015-11-15"}
219
+ {"name"=>"APPLE 蘋果 筆記型電腦 鍵盤膜 MacBook Air Pro 13.3吋 15.4吋 超薄 TP... gf0902 (10) 商品所在地:台中市", "price"=>" 80元", "num"=>"0", "update_time"=>"2015-11-15"}
220
+ {"name"=>"APPLE 蘋果 筆記型電腦 鍵盤膜 MacBook Air Pro 11 超薄 TPU保護膜 gf0902 (10) 商品所在地:台中市", "price"=>"500元 1,000元", "num"=>"0", "update_time"=>"2015-11-15"}
221
+ {"name"=>"超誇張100元起 D-Link友訊 DIR-820L 802.11ac AC1200 雙頻無線路由器 o680680o (3) 商品所在地:新北市", "price"=>"4,700元 9,000元", "num"=>"2", "update_time"=>"2015-11-15"}
222
+ {"name"=>"Lenovo Yoga Table2 小海龜 (52) 商品所在地:桃園市", "price"=>" 15,000元", "num"=>"1", "update_time"=>"2015-11-15"}
223
+ {"name"=>"【手機玩家】IPHONE6 16G金外觀約九成新保固至2016-7月 Anycall0314 (49) 商品所在地:新竹市", "price"=>" 6,000元", "num"=>"0", "update_time"=>"2015-11-15"}
224
+ {"name"=>"1U 機架型ATOM主機 雙LAN kahnmao (60) 商品所在地:新北市", "price"=>"20,000元 25,000元", "num"=>"0", "update_time"=>"2015-11-15"}
225
+ {"name"=>"2013年中 13吋 Macbook air [A1466] wpchang (0) 商品所在地:台北市 (可交換商品)", "price"=>" 6,200元", "num"=>"1", "update_time"=>"2015-11-15"}
226
+ {"name"=>"極新保固中ASUS RT-AC87U AC2400華碩雙頻無線路由器(2.4/5GHz) cham3130n (1) 商品所在地:台北市", "price"=>" 12,000元", "num"=>"3", "update_time"=>"2015-11-15"}
227
+ {"name"=>"Surface Pro 1 鍵盤、觸控筆 dih0512 (6) 商品所在地:桃園市 (可交換商品)", "price"=>" 50元", "num"=>"0", "update_time"=>"2015-11-15"}
228
+ {"name"=>"(11/15到貨) 創見 DDR 400 1G 桌上型記憶體 功能正常良品 $50元/1支 QQ\"嘿 (71) 商品所在地:桃園市", "price"=>"5,500元 6,000元", "num"=>"0", "update_time"=>"2015-11-15"}
229
+ {"name"=>"賣99.99新黑色ASUS MeMO Pad 7 (ME572CL) 2GB/16GB LTE 星空下的雨 (31) 商品所在地:新北市 (可交換商品)", "price"=>" 10,500元", "num"=>"2", "update_time"=>"2015-11-15"}
230
+ {"name"=>"Synology DS1511+ 5 bay 專為中小型企業設計的高效能 NAS 伺服器 dg4838 (13) 商品所在地:台北市", "price"=>" 2,700元", "num"=>"2", "update_time"=>"2015-11-15"}
231
+ {"name"=>"全新未拆 羅技MX Master fervidity (5) 商品所在地:台中市 (可交換商品)", "price"=>"9,500元 10,000元", "num"=>"0", "update_time"=>"2015-11-15"}
232
+ {"name"=>"賣 99.99 新Samsung Galaxy Tab S 8.4 白3G/16G LTE ( 可通話平... 星空下的雨 (31) 商品所在地:新北市 (可交換商品)", "price"=>nil, "num"=>nil, "update_time"=>nil}
233
+ ```
234
+ **3. Find top 3 goods in a category by the keyword**
235
+ ```ruby
236
+ require 'shopee'
237
+ ##Example :category is '電腦資訊'; keyword is 'samsung'
238
+ cshopeecate = ShopeeScrape::ShopeeListGoodsByCate.new(category)
239
+ goods = shopeecate.goods
240
+ puts shopeecate.search_keyword(goods, keyword)
241
+ ```
242
+ - Expected output
243
+ ```
244
+ {"name"=>"Samsung GALAXY Tab4 7.0 LTE (未拆封) 只接受面交 價格可再議 schumark (0) 商品所在地:台中市", "price"=>" 5,800元", "num"=>"0", "update_time"=>"2015-11-16"}
245
+ {"name"=>"賣 99.99 新Samsung Galaxy Tab S 8.4 白3G/16G LTE ( 可通話平... 星空下的雨 (31) 商品所在地:新北市 (可交換商品)", "price"=>" 1,000元", "num"=>"4", "update_time"=>"2015-11-16"}
246
+ {"name"=>"Samsung Tab S 8.4 WIFI 黑金 極新無傷 保固至明年4月 附購買證明 s2.mini... 153013 (11) 商品所在地:桃園市 (可交換商品)", "price"=>" 4,600元", "num"=>"1", "update_time"=>"2015-11-16"}
54
247
  ```
55
248
 
56
249
  ## License
data/bin/shopee CHANGED
@@ -11,14 +11,36 @@ Commander.configure do
11
11
  program :version, '0.0.4'
12
12
  program :description, 'Scrape informations from Mobile01'
13
13
 
14
- command :show do |c|
15
- c.syntax = 'shopee show all-cate'
16
- c.description = 'List all categories'
14
+ command :list do |c|
15
+ c.syntax = 'shopee list [args]'
16
+ c.description = 'List goods by the category'
17
17
 
18
- c.action do |args, options|
19
- shopeecate = ShopeeScrape::ShopeeListAll.new
20
- puts shopeecate.get_categories
18
+ c.action do |args, options|
19
+ shopeecate = ShopeeScrape::ShopeeListGoodsByCate.new(args[0])
20
+ puts shopeecate.goods
21
+ end
21
22
  end
22
- end
23
+
24
+ command :allcate do |c|
25
+ c.syntax = 'shopee allcate '
26
+ c.description = 'List all categories'
27
+
28
+ c.action do |args, options|
29
+ shopeecate = ShopeeScrape::ShopeeListAll.new
30
+ puts shopeecate.get_categories
31
+ end
32
+ end
33
+
34
+ command :search do |c|
35
+ c.syntax = 'shopee search [args]'
36
+ c.description = 'search similar good'
37
+
38
+ c.action do |args, options|
39
+ shopeecate = ShopeeScrape::ShopeeListGoodsByCate.new(args[0])
40
+ goods = shopeecate.goods
41
+ puts shopeecate.search_keyword(goods, args[1])
42
+ end
43
+ end
44
+
23
45
 
24
46
  end
@@ -1,4 +1,4 @@
1
1
  module ShopeeScrape
2
- VERSION = '0.0.4'
3
- DATE = '2015-11-09'
2
+ VERSION = '0.1.1'
3
+ DATE = '2015-11-22'
4
4
  end
data/lib/shopee.rb CHANGED
@@ -1,43 +1,104 @@
1
1
  require 'oga'
2
2
  require 'open-uri'
3
3
  require 'json'
4
+ require 'fuzzystringmatch'
4
5
 
5
6
  module ShopeeScrape
6
- class ShopeeListGoods
7
- def initialize(category, page)
8
- @category = category
9
- @page = page
7
+ class ShopeeListGoodsByCate
8
+
9
+ require_relative './data/mobile_category'
10
+ GOOD_NAME = "//div[contains(@class, 'subject')]"
11
+ GOOD_PRICE = "//div[contains(@class, 'price')]"
12
+ GOOD_NUM = "//div[contains(@class, 'num')]"
13
+ GOOD_UPTIME = "//div[contains(@class, 'updated')]"
14
+
15
+ def initialize(category)
16
+ parse_html(category)
17
+ end
18
+
19
+ def goods
20
+ @goods ||= extract_goods
10
21
  end
11
22
 
12
- def titles
13
- @titles ||= extract_titles
23
+ def search_keyword(good, keyword)
24
+ @similar ||= find_similiar_goods(goods, keyword)
14
25
  end
15
26
 
16
27
  private
17
28
 
18
- def parse_html
19
- url = "#{URL}"
29
+ def parse_html(id)
30
+ url = ALL_LINK[id]
20
31
  @document = Oga.parse_html(open(url))
21
32
  end
22
33
 
23
- def extract_titles
24
- result = []
25
- @document.xpath(CARD_TITLE_XPATH).map do |card|
26
- card.xpath(XPATH_CARD).map do |item|
27
-
28
- stri = item.text
29
- check = stri.empty?
30
- if check == false
31
- element = {}
32
- element['title'] = item.text
33
- result << element
34
+ def extract_goods
35
+ name = []
36
+ price = []
37
+ num = []
38
+ update_time = []
39
+ @document.xpath(GOOD_NAME).map do |good|
40
+ name << good.text
41
+ end
42
+
43
+ @document.xpath(GOOD_PRICE).map do |good|
44
+ price << good.text
45
+ end
46
+
47
+ @document.xpath(GOOD_NUM).map do |good|
48
+ num << good.text
49
+ end
50
+
51
+ @document.xpath(GOOD_UPTIME).map do |good|
52
+ update_time << good.text
53
+ end
54
+
55
+ number = name.length
56
+ results = []
57
+ # puts number
58
+ if number > 32
59
+ number = 32
60
+ end
61
+ for i in 2..number-1
62
+ element = {}
63
+ element['name'] = name[i]
64
+ element['price'] = price[i]
65
+ element['num'] = num[i]
66
+ element['update_time'] = update_time[i]
67
+ results << element
68
+ end
69
+
70
+ results
71
+ end
72
+
73
+ def find_similiar_goods(goods, keyword)
74
+ jarow = FuzzyStringMatch::JaroWinkler.create( :native )
75
+ rank = {}
76
+ goods.each do |good|
77
+ good_name = good['name']
78
+ value = jarow.getDistance(good_name ,keyword)
79
+ rank[good_name] = value
80
+ end
81
+
82
+ rank_after_sort = Hash[rank.sort_by{|k, v| v}.reverse]
83
+ key = rank_after_sort.keys()
84
+ results = []
85
+ for i in 0..2
86
+ good_name = key[i]
87
+ goods.each do |good|
88
+ if good['name'] == good_name
89
+ results << good
90
+ break
34
91
  end
35
92
  end
36
93
  end
37
- result.to_json
94
+
95
+ results
96
+
38
97
  end
39
98
  end
40
99
 
100
+
101
+
41
102
  # =============================
42
103
  # List all category of mobile01
43
104
  # =============================
@@ -55,7 +116,7 @@ module ShopeeScrape
55
116
  private
56
117
 
57
118
  def extract_json
58
- list = @cate_name.keys()
119
+ list = @cate_name.keys()
59
120
  end
60
121
  end
61
122