Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
crawler.vmusicchart.vn
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Phạm Văn Đoan
crawler.vmusicchart.vn
Commits
9de1bf88
Commit
9de1bf88
authored
Mar 26, 2020
by
Phạm Văn Đoan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cập nhật: lấy thời lượng của bài hát từ NCT
parent
108f653e
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
50 additions
and
13 deletions
+50
-13
NctCrawlerTrackCommand.php
app/Console/Commands/Nct/NctCrawlerTrackCommand.php
+5
-1
TrackRepository.php
app/Repositories/TrackRepository.php
+45
-12
No files found.
app/Console/Commands/Nct/NctCrawlerTrackCommand.php
View file @
9de1bf88
...
@@ -68,12 +68,15 @@ class NctCrawlerTrackCommand extends Command
...
@@ -68,12 +68,15 @@ class NctCrawlerTrackCommand extends Command
$bulk_track_insert
=
[];
$bulk_track_insert
=
[];
foreach
(
$tracks
as
$key
=>
$track
)
{
foreach
(
$tracks
as
$key
=>
$track
)
{
$link
=
$this
->
privateGeTrackLink
(
$tracks_playlist
,
$track
[
'id_nct'
]);
//$link = $this->privateGeTrackLink($tracks_playlist, $track['id_nct']);
$link
=
$tracks_playlist
[
$key
][
'link'
];
$duration
=
$tracks_playlist
[
$key
][
'duration'
];
// Xử lý insert/update dựa vào tên bài hát
// Xử lý insert/update dựa vào tên bài hát
if
(
is_array
(
$inserted
)
&&
count
(
$inserted
)
>
0
&&
in_array
(
$track
[
'title'
],
$inserted
))
{
if
(
is_array
(
$inserted
)
&&
count
(
$inserted
)
>
0
&&
in_array
(
$track
[
'title'
],
$inserted
))
{
// Cập nhật
// Cập nhật
$track_db
=
Track
::
where
(
'title'
,
$track
[
'title'
])
->
take
(
1
)
->
get
();
$track_db
=
Track
::
where
(
'title'
,
$track
[
'title'
])
->
take
(
1
)
->
get
();
if
(
isset
(
$track_db
[
0
]))
{
if
(
isset
(
$track_db
[
0
]))
{
$track_db
[
0
]
->
track_duration
=
$duration
;
$track_db
[
0
]
->
id_nct
=
$track
[
'id_nct'
];
$track_db
[
0
]
->
id_nct
=
$track
[
'id_nct'
];
$track_db
[
0
]
->
id_nct_str
=
$track
[
'id_nct_str'
];
$track_db
[
0
]
->
id_nct_str
=
$track
[
'id_nct_str'
];
$track_db
[
0
]
->
link_nct_top100
=
$track
[
'link'
];
$track_db
[
0
]
->
link_nct_top100
=
$track
[
'link'
];
...
@@ -90,6 +93,7 @@ class NctCrawlerTrackCommand extends Command
...
@@ -90,6 +93,7 @@ class NctCrawlerTrackCommand extends Command
$bulk_track_insert
[
$key_insert
][
'genre'
]
=
1
;
$bulk_track_insert
[
$key_insert
][
'genre'
]
=
1
;
$bulk_track_insert
[
$key_insert
][
'download_hash'
]
=
md5
(
$track
[
'id_nct'
]);
$bulk_track_insert
[
$key_insert
][
'download_hash'
]
=
md5
(
$track
[
'id_nct'
]);
$bulk_track_insert
[
$key_insert
][
'time'
]
=
time
();
$bulk_track_insert
[
$key_insert
][
'time'
]
=
time
();
$bulk_track_insert
[
$key_insert
][
'track_duration'
]
=
$duration
;
$bulk_track_insert
[
$key_insert
][
'id_nct'
]
=
$track
[
'id_nct'
];
$bulk_track_insert
[
$key_insert
][
'id_nct'
]
=
$track
[
'id_nct'
];
$bulk_track_insert
[
$key_insert
][
'id_nct_str'
]
=
$track
[
'id_nct_str'
];
$bulk_track_insert
[
$key_insert
][
'id_nct_str'
]
=
$track
[
'id_nct_str'
];
$bulk_track_insert
[
$key_insert
][
'src_thumbnail_medium'
]
=
$track
[
'img'
];
$bulk_track_insert
[
$key_insert
][
'src_thumbnail_medium'
]
=
$track
[
'img'
];
...
...
app/Repositories/TrackRepository.php
View file @
9de1bf88
...
@@ -66,49 +66,59 @@ class TrackRepository extends BaseRepository
...
@@ -66,49 +66,59 @@ class TrackRepository extends BaseRepository
return
$query
->
get
()
->
toArray
();
return
$query
->
get
()
->
toArray
();
}
}
/**
* Crawler thông tin bài hát từ url top 100: https://www.nhaccuatui.com/top100/top-100-nhac-tre.m3liaiy6vVsF.html
* Nhưng URL này không lấy được link của bài hát và thời lượng
* Sử dụng link dạng playlist của top 100 thì lấy được link và thời lượng
* URL playlist của top 100: https://www.nhaccuatui.com/playlist/top-100-nhac-tre-hay-nhat-va.m3liaiy6vVsF.html?st=1
* Sử dụng composer package "sunra/php-simple-html-dom-parser"
*
* @param $url
* @return array
*/
public
function
processNctGetTrackInfoFromTop100
(
$url
)
public
function
processNctGetTrackInfoFromTop100
(
$url
)
{
{
$tracks
=
[];
$tracks
=
[];
$dom
=
getDom
(
$url
);
$dom
=
getDom
(
$url
);
/* Lấy tên bài hát */
/* Lấy tên bài hát
------------------------------------------------------------------------------------------
*/
$element_track_title
=
'div.box_info_field h3.h3 a'
;
$element_track_title
=
'div.box_info_field h3.h3 a'
;
foreach
(
$dom
->
find
(
$element_track_title
)
as
$data
)
{
foreach
(
$dom
->
find
(
$element_track_title
)
as
$data
)
{
$tracks
[
'title'
][]
=
str_replace
([
'<h2 class="card-header">'
,
'</h2>'
],
[
''
,
''
],
$data
->
innertext
);
$tracks
[
'title'
][]
=
str_replace
([
'<h2 class="card-header">'
,
'</h2>'
],
[
''
,
''
],
$data
->
innertext
);
}
}
/* Lấy đường dẫn ảnh của bài hát */
/* Lấy đường dẫn ảnh của bài hát
----------------------------------------------------------------------------
*/
$element_track_img
=
'div.box_info_field a img'
;
$element_track_img
=
'div.box_info_field a img'
;
foreach
(
$dom
->
find
(
$element_track_img
)
as
$data
)
{
foreach
(
$dom
->
find
(
$element_track_img
)
as
$data
)
{
$tracks
[
'img'
][]
=
str_replace
([
'<h2 class="card-header">'
,
'</h2>'
],
[
''
,
''
],
$data
->
{
"data-src"
});
$tracks
[
'img'
][]
=
str_replace
([
'<h2 class="card-header">'
,
'</h2>'
],
[
''
,
''
],
$data
->
{
"data-src"
});
}
}
/* Lấy link bài hát */
/* Lấy link bài hát
-----------------------------------------------------------------------------------------
*/
$element_track_link
=
'div.box_info_field h3.h3 a'
;
$element_track_link
=
'div.box_info_field h3.h3 a'
;
foreach
(
$dom
->
find
(
$element_track_link
)
as
$data
)
{
foreach
(
$dom
->
find
(
$element_track_link
)
as
$data
)
{
$link
=
str_replace
([
'<h2 class="card-header">'
,
'</h2>'
],
[
''
,
''
],
$data
->
href
);
$link
=
str_replace
([
'<h2 class="card-header">'
,
'</h2>'
],
[
''
,
''
],
$data
->
href
);
$tracks
[
'link'
][]
=
$link
;
$tracks
[
'link'
][]
=
$link
;
}
}
/* Lấy tên ca sĩ hát */
/* Lấy tên ca sĩ hát
----------------------------------------------------------------------------------------
*/
$element_track_singer
=
'div.box_info_field h4.list_name_singer a'
;
$element_track_singer
=
'div.box_info_field h4.list_name_singer a'
;
foreach
(
$dom
->
find
(
$element_track_singer
)
as
$data
)
{
foreach
(
$dom
->
find
(
$element_track_singer
)
as
$data
)
{
$tracks
[
'singer'
][]
=
str_replace
([
'<h2 class="card-header">'
,
'</h2>'
],
[
''
,
''
],
$data
->
innertext
);
$tracks
[
'singer'
][]
=
str_replace
([
'<h2 class="card-header">'
,
'</h2>'
],
[
''
,
''
],
$data
->
innertext
);
}
}
/* Lấy url thông tin cá nhân ca sĩ */
/* Lấy url thông tin cá nhân ca sĩ
--------------------------------------------------------------------------
*/
$element_singer_profile
=
'div.box_info_field h4.list_name_singer a'
;
$element_singer_profile
=
'div.box_info_field h4.list_name_singer a'
;
foreach
(
$dom
->
find
(
$element_singer_profile
)
as
$data
)
{
foreach
(
$dom
->
find
(
$element_singer_profile
)
as
$data
)
{
$tracks
[
'url_profile'
][]
=
str_replace
([
'<h2 class="card-header">'
,
'</h2>'
],
[
''
,
''
],
$data
->
href
);
$tracks
[
'url_profile'
][]
=
str_replace
([
'<h2 class="card-header">'
,
'</h2>'
],
[
''
,
''
],
$data
->
href
);
}
}
/* Lấy ID dạng chuỗi của bài hát */
/* Lấy ID dạng chuỗi của bài hát
----------------------------------------------------------------------------
*/
$element_track_id_str
=
'div.box_song_action a.button_add_playlist'
;
$element_track_id_str
=
'div.box_song_action a.button_add_playlist'
;
foreach
(
$dom
->
find
(
$element_track_id_str
)
as
$data
)
{
foreach
(
$dom
->
find
(
$element_track_id_str
)
as
$data
)
{
$tracks
[
'id_nct_str'
][]
=
str_replace
([
'btnShowBoxPlaylist_'
,
'</h2>'
],
[
''
,
''
],
$data
->
id
);
$tracks
[
'id_nct_str'
][]
=
str_replace
([
'btnShowBoxPlaylist_'
,
'</h2>'
],
[
''
,
''
],
$data
->
id
);
}
}
/* Lấy ID dạng số của bài hát */
/* Lấy ID dạng số của bài hát
-------------------------------------------------------------------------------
*/
$element_track_id
=
'div.box_info_field'
;
$element_track_id
=
'div.box_info_field'
;
$start
=
'<span class=\"export_listen\" id="NCTCounter__'
;
$start
=
'<span class=\"export_listen\" id="NCTCounter__'
;
$end
=
'">0<\/span>'
;
$end
=
'">0<\/span>'
;
...
@@ -121,7 +131,7 @@ class TrackRepository extends BaseRepository
...
@@ -121,7 +131,7 @@ class TrackRepository extends BaseRepository
}
}
}
}
/* Tổng hợp dữ liệu thành mảng */
/* Tổng hợp dữ liệu thành mảng
------------------------------------------------------------------------------
*/
$result
=
[];
$result
=
[];
for
(
$i
=
0
;
$i
<
count
(
$tracks
[
'title'
]);
$i
++
)
{
for
(
$i
=
0
;
$i
<
count
(
$tracks
[
'title'
]);
$i
++
)
{
$result
[
$i
][
'id_nct_str'
]
=
$tracks
[
'id_nct_str'
][
$i
];
$result
[
$i
][
'id_nct_str'
]
=
$tracks
[
'id_nct_str'
][
$i
];
...
@@ -134,12 +144,20 @@ class TrackRepository extends BaseRepository
...
@@ -134,12 +144,20 @@ class TrackRepository extends BaseRepository
return
$result
;
return
$result
;
}
}
/**
* Lấy link và thời lượng của bài hát từ link playlist của top 100
* URL: https://www.nhaccuatui.com/playlist/top-100-nhac-tre-hay-nhat-va.m3liaiy6vVsF.html?st=1
* Sử dụng composer package "yangqi/htmldom"
*
* @param $url
* @return array
*/
public
function
processNctGetTrackInfoFromTop100Playlist
(
$url
)
public
function
processNctGetTrackInfoFromTop100Playlist
(
$url
)
{
{
$tracks
=
[];
$tracks
=
[];
$dom
=
new
Htmldom
(
$url
);
$dom
=
new
Htmldom
(
$url
);
/* Lấy ID dạng chuỗi của bài hát */
/* Lấy ID dạng chuỗi của bài hát
----------------------------------------------------------------------------
*/
$element_track_id_str
=
'li'
;
$element_track_id_str
=
'li'
;
foreach
(
$dom
->
find
(
$element_track_id_str
)
as
$data
)
{
foreach
(
$dom
->
find
(
$element_track_id_str
)
as
$data
)
{
if
(
isset
(
$data
->
key
))
{
if
(
isset
(
$data
->
key
))
{
...
@@ -147,7 +165,7 @@ class TrackRepository extends BaseRepository
...
@@ -147,7 +165,7 @@ class TrackRepository extends BaseRepository
}
}
}
}
/* Lấy link bài hát */
/* Lấy link bài hát
-----------------------------------------------------------------------------------------
*/
$element_track_link
=
'li a'
;
$element_track_link
=
'li a'
;
foreach
(
$dom
->
find
(
$element_track_link
)
as
$data
)
{
foreach
(
$dom
->
find
(
$element_track_link
)
as
$data
)
{
if
(
isset
(
$data
->
class
)
&&
$data
->
class
==
'button_new_window'
)
{
if
(
isset
(
$data
->
class
)
&&
$data
->
class
==
'button_new_window'
)
{
...
@@ -155,7 +173,7 @@ class TrackRepository extends BaseRepository
...
@@ -155,7 +173,7 @@ class TrackRepository extends BaseRepository
}
}
}
}
/* Lấy ID dạng số */
/* Lấy ID dạng số
-------------------------------------------------------------------------------------------
*/
$element_track_id
=
'li span'
;
$element_track_id
=
'li span'
;
foreach
(
$dom
->
find
(
$element_track_id
)
as
$data
)
{
foreach
(
$dom
->
find
(
$element_track_id
)
as
$data
)
{
if
(
isset
(
$data
->
id
)
&&
isset
(
$data
->
class
)
&&
$data
->
class
==
'icon_listen'
)
{
if
(
isset
(
$data
->
id
)
&&
isset
(
$data
->
class
)
&&
$data
->
class
==
'icon_listen'
)
{
...
@@ -163,12 +181,27 @@ class TrackRepository extends BaseRepository
...
@@ -163,12 +181,27 @@ class TrackRepository extends BaseRepository
}
}
}
}
/* Tổng hợp dữ liệu thành mảng */
/* Lấy thời gian của bài hát từ thẻ <meta content="PT3M51S" itemprop="duration" /> -------------------------- */
$element_track_duration
=
'li meta'
;
foreach
(
$dom
->
find
(
$element_track_duration
)
as
$data
)
{
if
(
isset
(
$data
->
content
)
&&
isset
(
$data
->
itemprop
)
&&
$data
->
itemprop
==
'duration'
)
{
$duration_str
=
str_replace
([
'PT'
,
'M'
,
'S'
],
[
''
,
':'
,
''
],
$data
->
content
);
$duration_array
=
explode
(
':'
,
$duration_str
);
if
(
count
(
$duration_array
)
==
2
)
{
$tracks
[
'duration'
][]
=
intval
(
$duration_array
[
0
])
*
60
+
intval
(
$duration_array
[
1
]);
}
else
{
$tracks
[
'duration'
][]
=
0
;
}
}
}
/* Tổng hợp dữ liệu thành mảng ------------------------------------------------------------------------------ */
$result
=
[];
$result
=
[];
for
(
$i
=
0
;
$i
<
count
(
$tracks
[
'id_nct_str'
]);
$i
++
)
{
for
(
$i
=
0
;
$i
<
count
(
$tracks
[
'id_nct_str'
]);
$i
++
)
{
$result
[
$i
][
'id_nct_str'
]
=
$tracks
[
'id_nct_str'
][
$i
];
$result
[
$i
][
'id_nct_str'
]
=
$tracks
[
'id_nct_str'
][
$i
];
$result
[
$i
][
'id_nct'
]
=
$tracks
[
'id_nct'
][
$i
];
$result
[
$i
][
'id_nct'
]
=
$tracks
[
'id_nct'
][
$i
];
$result
[
$i
][
'link'
]
=
$tracks
[
'link'
][
$i
];
$result
[
$i
][
'link'
]
=
$tracks
[
'link'
][
$i
];
$result
[
$i
][
'duration'
]
=
$tracks
[
'duration'
][
$i
];
}
}
return
$result
;
return
$result
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment