honeysearch 0.1.0

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
+ SHA256:
3
+ metadata.gz: 6bf9c29180cb84712ece27867a80fbf20d42c58b76b9c2ac7d1180affe6d97f7
4
+ data.tar.gz: 139725efd3905d854a24ae03a8e5fdc39f28033eb4149be054d7cb88403a18f9
5
+ SHA512:
6
+ metadata.gz: 293194618617c097aada636d582dcbebff61ea8591059037e6e6492fda3fe553590dc1d9f520766c7987185fc93bf8ebb15b1361e3b7a70eb9c7373807cb3825
7
+ data.tar.gz: bb9bf487e02999d9d1b671c501c05bb53b995077e3a75d56a9b034fca3d96ee0ae7caf6795898d2448cfc80c502f53b18532d237a9da06376a745f2f559a93e1
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in honeysearch.gemspec
4
+ gemspec
5
+
6
+ gem "rake", "~> 12.0"
7
+ gem "rspec", "~> 3.0"
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "honeysearch"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,27 @@
1
+ require_relative 'lib/honeysearch/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "honeysearch"
5
+ spec.version = Honeysearch::VERSION
6
+ spec.authors = ["David Siaw"]
7
+ spec.email = ["davidsiaw@gmail.com"]
8
+
9
+ spec.summary = %q{search karaoke}
10
+ spec.description = %q{search karaoke}
11
+ spec.homepage = "https://github.com/davidsiaw/honeysearch"
12
+ spec.license = "MIT"
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
+
15
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://github.com/davidsiaw/honeysearch"
19
+ spec.metadata["changelog_uri"] = "https://github.com/davidsiaw/honeysearch"
20
+
21
+ spec.files = Dir['{data,exe,lib,bin}/**/*'] +
22
+ %w[Gemfile honeysearch.gemspec]
23
+ spec.test_files = Dir['{spec,features}/**/*']
24
+ spec.bindir = 'exe'
25
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
+ spec.require_paths = ['lib']
27
+ end
@@ -0,0 +1,3 @@
1
+ module Honeysearch
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,124 @@
1
+ # encoding: utf-8
2
+ require "honeysearch/version"
3
+
4
+ require 'uri'
5
+ require 'net/http'
6
+
7
+ module Honeysearch
8
+ class Error < StandardError; end
9
+
10
+ SEARCH_URL='https://karaoke.mashup.jp/search_result.php'
11
+
12
+ class Search
13
+ attr_reader :page
14
+
15
+ def initialize(term, page=0)
16
+ @term = term
17
+ @page = page
18
+ end
19
+
20
+ def res
21
+ @res ||= begin
22
+ uri = URI("#{SEARCH_URL}?p=#{@page}")
23
+ Net::HTTP.post_form(
24
+ uri,
25
+ sel_rows1: 30,
26
+ topsearch_box: @term,
27
+ sel_rows2: 30,
28
+ s_title: '',
29
+ s_singer: '',
30
+ s_intro: '',
31
+ s_tieup: '',
32
+ search_genre: 0,
33
+ sel_search_genre: 0,
34
+ method: 0
35
+ )
36
+ end
37
+ end
38
+
39
+ def body
40
+ @body ||= res.body.force_encoding('UTF-8')
41
+ end
42
+
43
+ def result
44
+ body
45
+ end
46
+
47
+ def more?
48
+ body.include?('次の30曲')
49
+ end
50
+
51
+ def total_number
52
+ body.match(/検索結果\uff1a(?<number>[0-9]+)曲/)[:number].to_i
53
+ end
54
+ end
55
+
56
+ class SongData
57
+ def initialize(rawdata)
58
+ @rawdata = rawdata
59
+ end
60
+
61
+ def splitdata
62
+ @splitdata ||= begin
63
+ res = []
64
+ @rawdata.scan(%r{<li>(?<text>[^<]+)</li>}) do |x|
65
+ res << x.first
66
+ end
67
+ res
68
+ end
69
+ end
70
+
71
+ def artist
72
+ splitdata[0]
73
+ end
74
+
75
+ def title
76
+ splitdata[1]
77
+ end
78
+
79
+ def number
80
+ splitdata[2]
81
+ end
82
+
83
+ def lyrics
84
+ splitdata[3]
85
+ end
86
+
87
+ def tieup
88
+ splitdata[4]
89
+ end
90
+
91
+ def genre
92
+ splitdata[5]
93
+ end
94
+
95
+ def inspect
96
+ "#<SongData: #{number} (#{artist}, #{title})>"
97
+ end
98
+ end
99
+
100
+ class Parser
101
+ def initialize(result)
102
+ @result = result
103
+ end
104
+
105
+ def chopped_text
106
+ res = []
107
+ @result.split('<ul id="search_name" class="search_list">')[1..-1].each do |page|
108
+ doc = page.split('<div id="search_result" class="pc_none">').first
109
+ doc.split('<ul class="search_list">').each do |x|
110
+ res << x
111
+ end
112
+ end
113
+ res
114
+ end
115
+
116
+ def results
117
+ res = []
118
+ chopped_text[1..-1].each do |paragraph|
119
+ res << SongData.new(paragraph)
120
+ end
121
+ res
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,701 @@
1
+
2
+ RSpec.describe Honeysearch do
3
+ it "has a version number" do
4
+ expect(Honeysearch::VERSION).not_to be nil
5
+ end
6
+
7
+ let(:res1) { Honeysearch::Search.new('aqours') }
8
+ let(:res2) { Honeysearch::Search.new('aqours', 1) }
9
+ let(:res3) { Honeysearch::Search.new('ff14') }
10
+
11
+ it "downloads a result" do
12
+ res = res1.result
13
+ expect(Honeysearch::Parser.new(res).results.length).to eq 30
14
+ end
15
+
16
+ it "downloads a result page 2" do
17
+ res = res2.result
18
+ expect(Honeysearch::Parser.new(res).results.length).to eq 30
19
+ end
20
+
21
+ it "downloads a result and shows more" do
22
+ expect(res1.more?).to eq true
23
+ end
24
+
25
+ it "downloads a result and shows number" do
26
+ expect(res1.total_number).to eq 92
27
+ end
28
+
29
+ it "downloads a result and shows number 2" do
30
+ expect(res3.total_number).to eq 21
31
+ end
32
+
33
+ it "downloads a result and shows more" do
34
+ expect(res3.more?).to eq false
35
+ end
36
+
37
+ it 'parses a result' do
38
+ RESULT=<<~RESULT
39
+ <html>
40
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
41
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
42
+ <head>
43
+ <title>カラオケパセラ 検索・ランキング・新譜情報|MUEカラオケ</title>
44
+ <meta name="keywords" content="パセラ,カラオケ,ランキング,人気,新曲,新譜,検索,洋楽,韓国,中国,外国曲">
45
+ <meta name="description" content="カラオケパセラのオリジナルカラオケシステム「MUEカラシステム」は曲数世界最強! だからあなたの歌いたい曲がきっと見つかる!人気カラオケランキング、楽曲検索、新曲情報サイト。">
46
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
47
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
48
+ <script src="js/bgswitcher.js"></script>
49
+ <link rel="stylesheet" type="text/css" href="css/pasela.css"/ media="screen and (min-width:769px)" >
50
+ <link rel="stylesheet" type="text/css" href="css/pasela_sp.css"/ media="screen and (max-width:768px)" >
51
+ <script type="text/javascript">
52
+ var now_page = 0;
53
+ </script>
54
+
55
+ <script type="text/javascript">
56
+ history.replaceState(null, document.getElementsByTagName('title')[0].innerHTML, null);
57
+ window.addEventListener('popstate', function() {
58
+ if($("#loading").length != 0){
59
+ $("#loading").remove();
60
+ }
61
+ }, false);
62
+
63
+ $(window).unload(function(){
64
+ if($("#loading").length != 0){
65
+ $("#loading").remove();
66
+ }
67
+ });
68
+
69
+ var i_commit = 0;
70
+
71
+ function getScrollBottom() {
72
+ var body = window.document.body;
73
+ var html = window.document.documentElement;
74
+ var scrollTop = body.scrollTop || html.scrollTop;
75
+ var mh = html.scrollHeight;
76
+ if (html.scrollHeight < html.clientHeight) {
77
+ mh = html.clientHeight;
78
+ }
79
+ var y = mh - scrollTop;
80
+ return y;
81
+ }
82
+
83
+ $(document).ready(function(){
84
+ //BGSWITCHER設定
85
+ $('#bgswitcher').bgSwitcher({
86
+ images: ['images/top_01.jpg','images/top_02.jpg','images/top_03.jpg','images/top_04.jpg','images/top_05.jpg'],
87
+ interval: 5000
88
+ });
89
+ });
90
+ $(window).ready(function(){
91
+ // humボタンのクリック
92
+ $('#hum').on('click',function(){
93
+ $('#navi').css({transform:'translate(0,110vw)'});
94
+ });
95
+ // navi_closeボタンのクリック
96
+ $('#navi_close').on('click',function(){
97
+ $('#navi').css({transform:'translate(0,-110vw)'});
98
+ });
99
+ //topbackボタンの初期非表示
100
+ var topback = $('#topback');
101
+ topback.hide();
102
+ //スクロールでtopbackボタンの表示
103
+ $(window).scroll(function(){
104
+
105
+ if (getScrollBottom() < 700){
106
+ topback.fadeIn();
107
+ }else{
108
+ topback.fadeOut();
109
+ }
110
+ });
111
+ // スクロールの速度を落とす
112
+ $('a[href^="#"]').click(function() {
113
+ // スクロールの速度を選択
114
+ var speed = 200;
115
+ // アンカーの値取得する
116
+ var href= $(this).attr("href");
117
+ // 移動先を取得する
118
+ var target = $(href == "#" || href == "" ? 'html' : href);
119
+ // 移動先を数値で取得する
120
+ var position = target.offset().top;
121
+ // スムーススクロールの設定
122
+ $('body,html').animate({scrollTop:position}, speed, 'swing');
123
+ return false;
124
+ });
125
+ });
126
+ //レスポンシブルの切り替えでリロード
127
+ var timer = 0;
128
+ var currentWidth = window.innerWidth;
129
+ $(window).resize(function(){
130
+ if (currentWidth == window.innerWidth) {
131
+ return;
132
+ }
133
+ if (timer > 0) {
134
+ clearTimeout(timer);
135
+ }
136
+ timer = setTimeout(function () {
137
+ location.reload();
138
+ }, 200);
139
+ });
140
+
141
+ function gotoPage(page) {
142
+ if($("#loading").length == 0){
143
+ var action = document.frm.action;
144
+ action = action + "?p=" + page;
145
+ document.frm.action = action;
146
+ dispLoading();
147
+ setTimeout(function() {document.frm.submit();}, 500);
148
+ }
149
+ }
150
+
151
+ function dispLoading(){
152
+ if($("#loading").length == 0){
153
+ $("body").append("<div id='loading'><div class='loadingMsg'>ページ切り替え中</div></div>");
154
+ }
155
+ }
156
+
157
+ function onSelectRows() {
158
+ if($("#loading").length == 0){
159
+ var action = document.frm.action;
160
+ action = action + "?p=" + now_page;
161
+ var sel_rows = document.getElementById("id_sel_rows").value;
162
+ document.frm.sel_rows.value = sel_rows;
163
+ document.frm.action = action;
164
+ dispLoading();
165
+ setTimeout(function() {document.frm.submit();}, 500);
166
+ }
167
+ }
168
+
169
+ </script>
170
+
171
+ <style>
172
+ @media screen and (max-width: 768px) {
173
+ .search_list li a{
174
+ margin: 0;
175
+ display: block;
176
+ text-decoration: none;
177
+ color: #000;
178
+ }
179
+ }
180
+
181
+ #loading {
182
+ display: table;
183
+ width: 100%;
184
+ height: 100%;
185
+ position: fixed;
186
+ top: 0;
187
+ left: 0;
188
+ background-color: #fff;
189
+ opacity: 0.8;
190
+ z-index: 2000;
191
+ }
192
+
193
+ #loading .loadingMsg {
194
+ display: table-cell;
195
+ text-align: center;
196
+ vertical-align: middle;
197
+ padding-top: 140px;
198
+ background: url("images/loading.gif") center center no-repeat;
199
+ }
200
+
201
+ .select_box {
202
+ font-size: 16px;
203
+ margin-bottom: 16px;
204
+ }
205
+
206
+ @media screen and (max-width: 768px) {
207
+ .select_box {
208
+ width: 80% !important;
209
+ margin-left: 5%;
210
+ margin-bottom: 5%;
211
+ padding: 2vw;
212
+ font-size: 1.4em !important;
213
+ }
214
+ }
215
+
216
+ </style>
217
+
218
+ </head>
219
+ <body>
220
+ <div id="waku">
221
+ <div id="header">
222
+ <a href="index.php"><img src="images/logo_small_red.png"></a>
223
+ <img src="images/powerdby_black.png">
224
+ <form name="frm_ser" method="post" action="search_result.php">
225
+ <!--
226
+ <input type="text" name="headersearch_box" id="headersearch_box" class="sp_none" value="" />
227
+ <input type="button" name="headersearch_btn" id="headersearch_btn" class="sp_none" value="検索" onclick="javascript:document.frm_ser.submit();" />
228
+ -->
229
+ </form> </div><!-- /header -->
230
+ <div id="navi">
231
+ <ul>
232
+ <li><a href="index.php">ホーム</a></li>
233
+ <li><a href="search.php">カラオケサーチ</a></li>
234
+ <li><a href="ranking.php">カラオケランキング</a></li>
235
+ <li><a href="newsong.php">新譜リスト</a></li>
236
+ </ul>
237
+ <div id="navi_close" class="pc_none">×</div>
238
+ </div><!-- /navi -->
239
+ <div id="search">
240
+ <div class="top_h1">KARAOKE</div>
241
+ <div class="top_h2">SEARCH</div>
242
+ <div class="search_result_h"><select id="id_sel_rows" name="sel_rows" class="select_box" onChange="javascript:onSelectRows();"><option value="10">10行表示</option><option value="30" selected>30行表示</option><option value="50">50行表示</option><option value="100">100行表示</option></select><br/>
243
+ 検索結果:92曲 (1~30曲を表示中)</div>
244
+ <div class="searchtop_btn sp_none"><a href="search.php?rows=30&sk=aqours,,,,,0,">検索TOPへ</a></div>
245
+ <div class="sp_none">
246
+ <ul id="search_name" class="search_list">
247
+ <li>歌手名</li>
248
+ <li>曲名</li>
249
+ <li>曲番号</li>
250
+ <li>歌い出し</li>
251
+ <li>タイアップ</li>
252
+ <li>ジャンル</li>
253
+ </ul>
254
+ <ul class="search_list">
255
+ <li>Aqours</li>
256
+ <li>i-n-g, I TRY!!</li>
257
+ <li>4570B6</li>
258
+ <li>まるで夢のようなって</li>
259
+ <li>ラブライブ!サンシャイン!!The School Idol Movie Over the...<番組名></li>
260
+ <li>アニメ</li>
261
+ </ul>
262
+ <ul class="search_list">
263
+ <li>Aqours</li>
264
+ <li>青空Jumping Heart</li>
265
+ <li>3210B2</li>
266
+ <li>見たことない夢の軌道 追いかけ</li>
267
+ <li>ラブライブ!サンシャイン!!(TV版)<番組名></li>
268
+ <li>アニメ</li>
269
+ </ul>
270
+ <ul class="search_list">
271
+ <li>Aqours</li>
272
+ <li>青空Jumping Heart</li>
273
+ <li>3745B24</li>
274
+ <li>見たことない夢の軌道 追いかけ</li>
275
+ <li>ラブライブ!サンシャイン!!(TV版)<番組名></li>
276
+ <li>アニメ</li>
277
+ </ul>
278
+ <ul class="search_list">
279
+ <li>Aqours</li>
280
+ <li>青空Jumping Heart【DAMライブ】</li>
281
+ <li>3962B37</li>
282
+ <li>見たことない夢の軌道 追いかけ</li>
283
+ <li>Animelo Summer Live<番組名></li>
284
+ <li>アニメ</li>
285
+ </ul>
286
+ <ul class="search_list">
287
+ <li>Aqours</li>
288
+ <li>青空Jumping Heart [歌ってみた利用OK]【歌ってみた利用OK】</li>
289
+ <li>4415B27</li>
290
+ <li>見たことない夢の軌道 追いかけ</li>
291
+ <li>ラブライブ!サンシャイン!!(TV版)<番組名></li>
292
+ <li>アニメ</li>
293
+ </ul>
294
+ <ul class="search_list">
295
+ <li>Aqours</li>
296
+ <li>Aqours Pirates Desire</li>
297
+ <li>4419A5</li>
298
+ <li>暗い… 夜の海には魔が宿るのさ</li>
299
+ <li>ラブライブ!サンシャイン!!<番組名></li>
300
+ <li>アニメ</li>
301
+ </ul>
302
+ <ul class="search_list">
303
+ <li>Aqours</li>
304
+ <li>Aqours☆HEROES</li>
305
+ <li>3541B47</li>
306
+ <li>Yaa-Yaa!! やあやあやあ 準備は</li>
307
+ <li>ラブライブ!サンシャイン!!<番組名></li>
308
+ <li>アニメ</li>
309
+ </ul>
310
+ <ul class="search_list">
311
+ <li>Aqours</li>
312
+ <li>Aqoursメドレー</li>
313
+ <li>3870B29</li>
314
+ <li>JOY</li>
315
+ <li></li>
316
+ <li>ポップス</li>
317
+ </ul>
318
+ <ul class="search_list">
319
+ <li>Aqours</li>
320
+ <li>Wake up, Challenger!!</li>
321
+ <li>4288B6</li>
322
+ <li>なんともなんない! じゃなくて</li>
323
+ <li>ラブライブ! スクールアイドルフェスティバル ALL STARS<番組名></li>
324
+ <li>アニメ</li>
325
+ </ul>
326
+ <ul class="search_list">
327
+ <li>Aqours</li>
328
+ <li>WATER BLUE NEW WORLD</li>
329
+ <li>3945B42</li>
330
+ <li>イマはイマで昨日と違うよ 明日</li>
331
+ <li>ラブライブ!サンシャイン!!(第2期)<番組名></li>
332
+ <li>アニメ</li>
333
+ </ul>
334
+ <ul class="search_list">
335
+ <li>Aqours</li>
336
+ <li>WATER BLUE NEW WORLD</li>
337
+ <li>4100B23</li>
338
+ <li>イマはイマで昨日と違うよ 明日</li>
339
+ <li>ラブライブ!サンシャイン!!(第2期)<番組名></li>
340
+ <li>アニメ</li>
341
+ </ul>
342
+ <ul class="search_list">
343
+ <li>Aqours</li>
344
+ <li>想いよひとつになれ</li>
345
+ <li>3726A31</li>
346
+ <li>想いよひとつになれ 想いが</li>
347
+ <li>ラブライブ!サンシャイン!!(TV版)<番組名></li>
348
+ <li>アニメ</li>
349
+ </ul>
350
+ <ul class="search_list">
351
+ <li>Aqours</li>
352
+ <li>想いよひとつになれ</li>
353
+ <li>3966A5</li>
354
+ <li>想いよひとつになれ 想いが</li>
355
+ <li>ラブライブ!サンシャイン!!(TV版)<番組名></li>
356
+ <li>アニメ</li>
357
+ </ul>
358
+ <ul class="search_list">
359
+ <li>Aqours</li>
360
+ <li>KA-GA-YA-KI-RA-RI-RA feat.初音ミク【VOCALOID】</li>
361
+ <li>4682A2</li>
362
+ <li>ねえ、聴いて? 声と音でセカイを</li>
363
+ <li>ラブライブ!サンシャイン!!(TV版)<番組名></li>
364
+ <li>アニメ</li>
365
+ </ul>
366
+ <ul class="search_list">
367
+ <li>Aqours</li>
368
+ <li>キセキヒカル</li>
369
+ <li>4439B29</li>
370
+ <li></li>
371
+ <li>ラブライブ!サンシャイン!!(第2期)<番組名></li>
372
+ <li>アニメ</li>
373
+ </ul>
374
+ <ul class="search_list">
375
+ <li>Aqours</li>
376
+ <li>君のこころは輝いてるかい?</li>
377
+ <li>3523B33</li>
378
+ <li>今・・・ みらい、変えてみたく</li>
379
+ <li>ラブライブ!サンシャイン!!(第2期)<番組名></li>
380
+ <li>アニメ</li>
381
+ </ul>
382
+ <ul class="search_list">
383
+ <li>Aqours</li>
384
+ <li>君のこころは輝いてるかい?</li>
385
+ <li>3711B16</li>
386
+ <li>今・・・ みらい、変えてみたく</li>
387
+ <li>ラブライブ!サンシャイン!!(第2期)<番組名></li>
388
+ <li>アニメ</li>
389
+ </ul>
390
+ <ul class="search_list">
391
+ <li>Aqours</li>
392
+ <li>君の瞳を巡る冒険</li>
393
+ <li>3908B40</li>
394
+ <li>謎は謎はいつも 目の前で違う</li>
395
+ <li>ラブライブ!サンシャイン!!(第2期)<番組名></li>
396
+ <li>アニメ</li>
397
+ </ul>
398
+ <ul class="search_list">
399
+ <li>Aqours</li>
400
+ <li>決めたよHand in Hand</li>
401
+ <li>3673A6</li>
402
+ <li>Hand in Hand,wow wo!・・・ なにを</li>
403
+ <li>ラブライブ!サンシャイン!!(TV版)<番組名></li>
404
+ <li>アニメ</li>
405
+ </ul>
406
+ <ul class="search_list">
407
+ <li>Aqours</li>
408
+ <li>KU-RU-KU-RU Cruller!</li>
409
+ <li>4551A2</li>
410
+ <li>Happy dance happy dance KU-RU</li>
411
+ <li>モンスターストライク×ラブライブ!サンシャイン!!<番組名></li>
412
+ <li>アニメ</li>
413
+ </ul>
414
+ <ul class="search_list">
415
+ <li>Aqours</li>
416
+ <li>恋になりたいAQUARIUM</li>
417
+ <li>3626B18</li>
418
+ <li>空色カーテン Open! 海色ゲート</li>
419
+ <li>ラブライブ!サンシャイン!!<番組名></li>
420
+ <li>アニメ</li>
421
+ </ul>
422
+ <ul class="search_list">
423
+ <li>Aqours</li>
424
+ <li>恋になりたいAQUARIUM</li>
425
+ <li>3711B17</li>
426
+ <li>空色カーテン Open! 海色ゲート</li>
427
+ <li>ラブライブ!サンシャイン!!<番組名></li>
428
+ <li>アニメ</li>
429
+ </ul>
430
+ <ul class="search_list">
431
+ <li>Aqours</li>
432
+ <li>心の羽よ君へ飛んでけ!</li>
433
+ <li>4496A17</li>
434
+ <li>ああ、変わってゆく 真っ青だった</li>
435
+ <li>ラブライブ!サンシャイン!!<番組名></li>
436
+ <li>アニメ</li>
437
+ </ul>
438
+ <ul class="search_list">
439
+ <li>Aqours</li>
440
+ <li>KOKORO Magic 'A to Z'</li>
441
+ <li>4288B7</li>
442
+ <li>なんでもないような毎日(でも?)</li>
443
+ <li>ラブライブ! スクールアイドルフェスティバル ALL STARS<番組名></li>
444
+ <li>アニメ</li>
445
+ </ul>
446
+ <ul class="search_list">
447
+ <li>Aqours</li>
448
+ <li>Thank you,FRIENDS!!</li>
449
+ <li>4049A42</li>
450
+ <li>そう、いまだから そういま僕ら</li>
451
+ <li>ラブライブ!サンシャイン!!<番組名></li>
452
+ <li>アニメ</li>
453
+ </ul>
454
+ <ul class="search_list">
455
+ <li>Aqours</li>
456
+ <li>サンシャインぴっかぴか音頭</li>
457
+ <li>3685A44</li>
458
+ <li>あっちから こっちから</li>
459
+ <li>ラブライブ!サンシャイン!!(TV版)<番組名></li>
460
+ <li>アニメ</li>
461
+ </ul>
462
+ <ul class="search_list">
463
+ <li>Aqours</li>
464
+ <li>JIMO-AI Dash!</li>
465
+ <li>4427B24</li>
466
+ <li>My love,my place! ココだよキミ</li>
467
+ <li>ラブライブ!サンシャイン!!<番組名></li>
468
+ <li>アニメ</li>
469
+ </ul>
470
+ <ul class="search_list">
471
+ <li>Aqours</li>
472
+ <li>Jump up HIGH!!</li>
473
+ <li>4223A1</li>
474
+ <li>Jump up! 空高く舞う鳥へ</li>
475
+ <li>ラブライブ!サンシャイン!!<番組名></li>
476
+ <li>アニメ</li>
477
+ </ul>
478
+ <ul class="search_list">
479
+ <li>Aqours</li>
480
+ <li>少女以上の恋がしたい</li>
481
+ <li>3793B1</li>
482
+ <li>知りたい 触れたい 今までどおり</li>
483
+ <li>ラブライブ! スクールアイドルフェスティバル<番組名></li>
484
+ <li>アニメ</li>
485
+ </ul>
486
+ <ul class="search_list">
487
+ <li>Aqours</li>
488
+ <li>ジングルベルがとまらない</li>
489
+ <li>3733B17</li>
490
+ <li>えがおが見たくて 今年も迷うの</li>
491
+ <li>ラブライブ! スクールアイドルフェスティバル<番組名></li>
492
+ <li>アニメ</li>
493
+ </ul>
494
+ </div>
495
+
496
+ <div id="search_result" class="pc_none">
497
+ <ul class="search_list">
498
+ <li><a href="database.php?id=4570B6&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
499
+ <li><a href="database.php?id=4570B6&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">i-n-g, I TRY!!</a></li>
500
+ <li>4570B6</li>
501
+ </ul>
502
+ <ul class="search_list">
503
+ <li><a href="database.php?id=3210B2&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
504
+ <li><a href="database.php?id=3210B2&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">青空Jumping Heart</a></li>
505
+ <li>3210B2</li>
506
+ </ul>
507
+ <ul class="search_list">
508
+ <li><a href="database.php?id=3745B24&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
509
+ <li><a href="database.php?id=3745B24&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">青空Jumping Heart</a></li>
510
+ <li>3745B24</li>
511
+ </ul>
512
+ <ul class="search_list">
513
+ <li><a href="database.php?id=3962B37&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
514
+ <li><a href="database.php?id=3962B37&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">青空Jumping Heart【DAMライブ】</a></li>
515
+ <li>3962B37</li>
516
+ </ul>
517
+ <ul class="search_list">
518
+ <li><a href="database.php?id=4415B27&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
519
+ <li><a href="database.php?id=4415B27&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">青空Jumping Heart [歌ってみた利用OK]【歌ってみた利用OK】</a></li>
520
+ <li>4415B27</li>
521
+ </ul>
522
+ <ul class="search_list">
523
+ <li><a href="database.php?id=4419A5&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
524
+ <li><a href="database.php?id=4419A5&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours Pirates Desire</a></li>
525
+ <li>4419A5</li>
526
+ </ul>
527
+ <ul class="search_list">
528
+ <li><a href="database.php?id=3541B47&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
529
+ <li><a href="database.php?id=3541B47&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours☆HEROES</a></li>
530
+ <li>3541B47</li>
531
+ </ul>
532
+ <ul class="search_list">
533
+ <li><a href="database.php?id=3870B29&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
534
+ <li><a href="database.php?id=3870B29&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqoursメドレー</a></li>
535
+ <li>3870B29</li>
536
+ </ul>
537
+ <ul class="search_list">
538
+ <li><a href="database.php?id=4288B6&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
539
+ <li><a href="database.php?id=4288B6&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Wake up, Challenger!!</a></li>
540
+ <li>4288B6</li>
541
+ </ul>
542
+ <ul class="search_list">
543
+ <li><a href="database.php?id=3945B42&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
544
+ <li><a href="database.php?id=3945B42&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">WATER BLUE NEW WORLD</a></li>
545
+ <li>3945B42</li>
546
+ </ul>
547
+ <ul class="search_list">
548
+ <li><a href="database.php?id=4100B23&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
549
+ <li><a href="database.php?id=4100B23&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">WATER BLUE NEW WORLD</a></li>
550
+ <li>4100B23</li>
551
+ </ul>
552
+ <ul class="search_list">
553
+ <li><a href="database.php?id=3726A31&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
554
+ <li><a href="database.php?id=3726A31&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">想いよひとつになれ</a></li>
555
+ <li>3726A31</li>
556
+ </ul>
557
+ <ul class="search_list">
558
+ <li><a href="database.php?id=3966A5&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
559
+ <li><a href="database.php?id=3966A5&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">想いよひとつになれ</a></li>
560
+ <li>3966A5</li>
561
+ </ul>
562
+ <ul class="search_list">
563
+ <li><a href="database.php?id=4682A2&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
564
+ <li><a href="database.php?id=4682A2&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">KA-GA-YA-KI-RA-RI-RA feat.初音ミク【VOCALOID】</a></li>
565
+ <li>4682A2</li>
566
+ </ul>
567
+ <ul class="search_list">
568
+ <li><a href="database.php?id=4439B29&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
569
+ <li><a href="database.php?id=4439B29&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">キセキヒカル</a></li>
570
+ <li>4439B29</li>
571
+ </ul>
572
+ <ul class="search_list">
573
+ <li><a href="database.php?id=3523B33&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
574
+ <li><a href="database.php?id=3523B33&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">君のこころは輝いてるかい?</a></li>
575
+ <li>3523B33</li>
576
+ </ul>
577
+ <ul class="search_list">
578
+ <li><a href="database.php?id=3711B16&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
579
+ <li><a href="database.php?id=3711B16&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">君のこころは輝いてるかい?</a></li>
580
+ <li>3711B16</li>
581
+ </ul>
582
+ <ul class="search_list">
583
+ <li><a href="database.php?id=3908B40&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
584
+ <li><a href="database.php?id=3908B40&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">君の瞳を巡る冒険</a></li>
585
+ <li>3908B40</li>
586
+ </ul>
587
+ <ul class="search_list">
588
+ <li><a href="database.php?id=3673A6&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
589
+ <li><a href="database.php?id=3673A6&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">決めたよHand in Hand</a></li>
590
+ <li>3673A6</li>
591
+ </ul>
592
+ <ul class="search_list">
593
+ <li><a href="database.php?id=4551A2&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
594
+ <li><a href="database.php?id=4551A2&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">KU-RU-KU-RU Cruller!</a></li>
595
+ <li>4551A2</li>
596
+ </ul>
597
+ <ul class="search_list">
598
+ <li><a href="database.php?id=3626B18&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
599
+ <li><a href="database.php?id=3626B18&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">恋になりたいAQUARIUM</a></li>
600
+ <li>3626B18</li>
601
+ </ul>
602
+ <ul class="search_list">
603
+ <li><a href="database.php?id=3711B17&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
604
+ <li><a href="database.php?id=3711B17&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">恋になりたいAQUARIUM</a></li>
605
+ <li>3711B17</li>
606
+ </ul>
607
+ <ul class="search_list">
608
+ <li><a href="database.php?id=4496A17&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
609
+ <li><a href="database.php?id=4496A17&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">心の羽よ君へ飛んでけ!</a></li>
610
+ <li>4496A17</li>
611
+ </ul>
612
+ <ul class="search_list">
613
+ <li><a href="database.php?id=4288B7&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
614
+ <li><a href="database.php?id=4288B7&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">KOKORO Magic 'A to Z'</a></li>
615
+ <li>4288B7</li>
616
+ </ul>
617
+ <ul class="search_list">
618
+ <li><a href="database.php?id=4049A42&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
619
+ <li><a href="database.php?id=4049A42&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Thank you,FRIENDS!!</a></li>
620
+ <li>4049A42</li>
621
+ </ul>
622
+ <ul class="search_list">
623
+ <li><a href="database.php?id=3685A44&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
624
+ <li><a href="database.php?id=3685A44&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">サンシャインぴっかぴか音頭</a></li>
625
+ <li>3685A44</li>
626
+ </ul>
627
+ <ul class="search_list">
628
+ <li><a href="database.php?id=4427B24&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
629
+ <li><a href="database.php?id=4427B24&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">JIMO-AI Dash!</a></li>
630
+ <li>4427B24</li>
631
+ </ul>
632
+ <ul class="search_list">
633
+ <li><a href="database.php?id=4223A1&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
634
+ <li><a href="database.php?id=4223A1&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Jump up HIGH!!</a></li>
635
+ <li>4223A1</li>
636
+ </ul>
637
+ <ul class="search_list">
638
+ <li><a href="database.php?id=3793B1&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
639
+ <li><a href="database.php?id=3793B1&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">少女以上の恋がしたい</a></li>
640
+ <li>3793B1</li>
641
+ </ul>
642
+ <ul class="search_list">
643
+ <li><a href="database.php?id=3733B17&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">Aqours</a></li>
644
+ <li><a href="database.php?id=3733B17&rp=search_result&sk=aqours,,,,,0,&p=0&sel_rows=30">ジングルベルがとまらない</a></li>
645
+ <li>3733B17</li>
646
+ </ul>
647
+ </div>
648
+ <form name=frm method="post" action="search_result.php">
649
+ <div id="prevnext_box">
650
+ <span class="prevnext"></span>
651
+ <span><a href="search.php?rows=30&sk=aqours,,,,,0,">検索TOPへ</a></span>
652
+ <span class="prevnext"><a href="javascript:gotoPage(1);">次の30曲</a></span>
653
+ </div>
654
+ <input type="hidden" name="sel_rows" value="30"> <input type="hidden" name="s_title" value="">
655
+ <input type="hidden" name="s_singer" value="">
656
+ <input type="hidden" name="s_singer_id" value="">
657
+ <input type="hidden" name="s_intro" value="">
658
+ <input type="hidden" name="s_tieup" value="">
659
+ <input type="hidden" name="sel_search_genre" value="0">
660
+ <input type="hidden" name="topsearch_box" value="aqours">
661
+ </form>
662
+ </div><!-- /search -->
663
+ <div id="foot_navi" class="sp_none">
664
+ <a class="foot_navi_list" href="index.php">ホーム</a>|
665
+ <a class="foot_navi_list" href="search.php">カラオケサーチ</a>|
666
+ <a class="foot_navi_list" href="ranking.php">カラオケランキング</a>|
667
+ <a class="foot_navi_list" href="newsong.php">新譜リスト</a>
668
+ </div><!-- /foot_navi -->
669
+ <ul id="sp_foot_navi" class="pc_none">
670
+ <li class="sp_foot_navi_list"><a href="index.php"><img src="images/spbtn_home.png"><span>ホーム</span></a></li>
671
+ <li class="sp_foot_navi_list"><a href="search.php"><img src="images/spbtn_search.png"><span>カラオケサーチ</span></a></li>
672
+ <li class="sp_foot_navi_list"><a href="ranking.php"><img src="images/spbtn_ranking.png"><span>カラオケランキング</span></a></li>
673
+ <li class="sp_foot_navi_list"><a href="newsong.php"><img src="images/spbtn_new.png"><span>新譜リスト</span></a></li>
674
+ </ul><!-- /sp_foot_navi -->
675
+ <div id="footer" class="center">
676
+ <div class="site"><a href="http://pasela.co.jp" target="_blank">カラオケパセラ オフィシャルサイト</a></div>
677
+ <div class="copy">Copyright 2018 Pasela Resorts. Powered by MUE Karaoke System.</div>
678
+ </div><!-- /footer -->
679
+
680
+
681
+ <!-- Global site tag (gtag.js) - Google Analytics -->
682
+ <script async src="https://www.googletagmanager.com/gtag/js?id=UA-129536340-1"></script>
683
+ <script>
684
+ window.dataLayer = window.dataLayer || [];
685
+ function gtag(){dataLayer.push(arguments);}
686
+ gtag('js', new Date());
687
+
688
+ gtag('config', 'UA-129536340-1');
689
+ </script>
690
+ <div id="topback">
691
+ <a href="#waku"><img src="images/topback.png"></a>
692
+ </div>
693
+ </div><!-- /waku -->
694
+ <div id="hum" class="pc_none"><img src="images/menu.png"></div>
695
+ </body>
696
+ </html>
697
+ RESULT
698
+
699
+ expect(Honeysearch::Parser.new(RESULT).results.length).to eq 30
700
+ end
701
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+ require "bundler/setup"
3
+ require "honeysearch"
4
+
5
+ RSpec.configure do |config|
6
+ # Enable flags like --only-failures and --next-failure
7
+ config.example_status_persistence_file_path = ".rspec_status"
8
+
9
+ # Disable RSpec exposing methods globally on `Module` and `main`
10
+ config.disable_monkey_patching!
11
+
12
+ config.expect_with :rspec do |c|
13
+ c.syntax = :expect
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: honeysearch
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - David Siaw
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-09-22 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: search karaoke
14
+ email:
15
+ - davidsiaw@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - Gemfile
21
+ - bin/console
22
+ - bin/setup
23
+ - honeysearch.gemspec
24
+ - lib/honeysearch.rb
25
+ - lib/honeysearch/version.rb
26
+ - spec/honeysearch_spec.rb
27
+ - spec/spec_helper.rb
28
+ homepage: https://github.com/davidsiaw/honeysearch
29
+ licenses:
30
+ - MIT
31
+ metadata:
32
+ allowed_push_host: https://rubygems.org
33
+ homepage_uri: https://github.com/davidsiaw/honeysearch
34
+ source_code_uri: https://github.com/davidsiaw/honeysearch
35
+ changelog_uri: https://github.com/davidsiaw/honeysearch
36
+ post_install_message:
37
+ rdoc_options: []
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 2.3.0
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ requirements: []
51
+ rubygems_version: 3.1.4
52
+ signing_key:
53
+ specification_version: 4
54
+ summary: search karaoke
55
+ test_files:
56
+ - spec/honeysearch_spec.rb
57
+ - spec/spec_helper.rb