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
f63f3efd
Commit
f63f3efd
authored
4 years ago
by
Phạm Văn Đoan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lấy lượt nghe bài hát
parent
f3fbe27b
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
347 additions
and
572 deletions
+347
-572
CrawlerTrackListenCommand.php
app/Console/Commands/CrawlerTrackListenCommand.php
+141
-0
Kernel.php
app/Console/Kernel.php
+6
-0
Constants.php
app/Helpers/Constants.php
+10
-0
Functions.php
app/Helpers/Functions.php
+48
-571
CrawlerListen.php
app/Models/CrawlerListen.php
+26
-0
CrawlerListenHistory.php
app/Models/CrawlerListenHistory.php
+21
-0
Crontjob.php
app/Models/Crontjob.php
+2
-1
TrackRepository.php
app/Repositories/TrackRepository.php
+86
-0
api.php
config/api.php
+7
-0
No files found.
app/Console/Commands/CrawlerTrackListenCommand.php
0 → 100644
View file @
f63f3efd
<?php
namespace
App\Console\Commands
;
use
App\Models\CrawlerListen
;
use
App\Models\Crontjob
;
use
App\Repositories\TrackRepository
;
use
Carbon\Carbon
;
use
Illuminate\Console\Command
;
class
CrawlerTrackListenCommand
extends
Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected
$signature
=
'crawler:get-listen {from_page?}'
;
/**
* The console command description.
*
* @var string
*/
protected
$description
=
'Lấy lượt nghe của bài hát ở các hệ thống dựa vào tham số truyền vào'
;
protected
$trackRepository
;
/**
* Create a new command instance.
*
* CrawlerTrackListenCommand constructor.
* @param TrackRepository $trackRepository
*/
public
function
__construct
(
TrackRepository
$trackRepository
)
{
parent
::
__construct
();
$this
->
trackRepository
=
$trackRepository
;
}
/**
* Execute the console command.
*
* @return mixed
*/
public
function
handle
()
{
// Ghi log xem có gọi không
Crontjob
::
create
([
'message'
=>
'CrawlerTrackListenCommand is called at '
.
Carbon
::
now
()]);
$from_page
=
$this
->
argument
(
'from_page'
);
if
(
empty
(
$from_page
)
||
!
in_array
(
$from_page
,
[
'zing'
,
'nct'
,
'nhacvn'
,
'keeng'
]))
{
$from_page
=
$this
->
choice
(
'Chọn trang nhạc '
,
[
'zing'
,
'nct'
,
'nhacvn'
,
'keeng'
]);
}
echo
"
\n
Bắt đầu xử lý lấy lượt nghe từ: "
.
$from_page
;
$crawlered
=
$this
->
trackRepository
->
getCrawlerListenInserted
(
$from_page
,
false
);
echo
"
\n
Tổng số bài hát đã lấy lượt nghe hôm nay: "
.
count
(
$crawlered
);
// Lấy mảng bài hát theo từng hệ thống nhạc
$inserted
=
$this
->
trackRepository
->
getTrackBySource
(
$from_page
,
$crawlered
);
echo
"
\n
Tổng số bài hát cần lấy lượt nghe: "
.
count
(
$inserted
);
if
(
count
(
$inserted
)
>
0
)
{
$data_listen
=
[];
foreach
(
$inserted
as
$key
=>
$track
)
{
$listen
=
$this
->
privateGetListen
(
$from_page
,
$track
);
if
(
$listen
>
0
)
{
$data_listen
[
$track
[
'id'
]]
=
$listen
;
}
echo
"
\n
"
.
(
$key
+
1
)
.
". "
.
$track
[
'title'
]
.
" (Track ID= "
.
$track
[
'id'
]
.
"): "
.
$listen
;
}
if
(
count
(
$data_listen
)
>
0
)
{
foreach
(
$data_listen
as
$track_id
=>
$listen
)
{
switch
(
$from_page
)
{
case
'zing'
:
CrawlerListen
::
updateOrCreate
(
[
'track_id'
=>
$track_id
],
[
'today_zing'
=>
$listen
,
'zing_crawler_at'
=>
Carbon
::
now
()]
);
break
;
case
'nct'
:
CrawlerListen
::
updateOrCreate
(
[
'track_id'
=>
$track_id
],
[
'today_nct'
=>
$listen
,
'nct_crawler_at'
=>
Carbon
::
now
()]
);
break
;
}
}
}
}
echo
"
\n
Lấy số lượt nghe kết thúc."
;
}
/**
* Hàm lấy lượt nghe thông qua api của các trang nhạc
*
* @param $src
* @param $track
* @return int
*/
private
function
privateGetListen
(
$src
,
$track
)
{
$listen
=
0
;
switch
(
$src
)
{
case
'zing'
:
$url
=
getZingUrlGetCounter
(
$track
[
'id_zing'
]);
$curl
=
cURL
(
$url
);
$response
=
json_decode
(
$curl
);
if
(
isset
(
$response
->
err
)
&&
$response
->
err
==
0
)
{
if
(
isset
(
$response
->
data
)
&&
isset
(
$response
->
data
->
total
)
&&
$response
->
data
->
total
>
0
)
{
$listen
=
$response
->
data
->
total
;
}
}
break
;
case
'nct'
:
$url
=
getNctUrlGetCounter
(
$track
[
'id_nct'
]);
$curl
=
cURL
(
$url
);
$response
=
json_decode
(
$curl
);
if
(
isset
(
$response
->
error_code
)
&&
$response
->
error_code
==
0
)
{
if
(
isset
(
$response
->
data
)
&&
isset
(
$response
->
data
->
songs
)
&&
$response
->
data
->
songs
->
{
$track
[
'id_nct'
]}
>
0
)
{
$listen
=
$response
->
data
->
songs
->
{
$track
[
'id_nct'
]};
}
}
break
;
}
return
$listen
;
}
}
This diff is collapsed.
Click to expand it.
app/Console/Kernel.php
View file @
f63f3efd
...
...
@@ -2,10 +2,12 @@
namespace
App\Console
;
use
App\Console\Commands\CrawlerTrackListenCommand
;
use
App\Console\Commands\CrontjobCommand
;
use
App\Console\Commands\Keeng\KeengCrawlerTrackCommand
;
use
App\Console\Commands\Nct\NctCrawlerTrackCommand
;
use
App\Console\Commands\NhacVn\NhacVnCrawlerTrackCommand
;
use
App\Console\Commands\Zing\ZingCrawlerListenCommand
;
use
App\Console\Commands\Zing\ZingCrawlerNewRealeaseCommand
;
use
App\Console\Commands\Zing\ZingCrawlerTrackCommand
;
use
App\Console\Commands\CrawlerTrackImageCommand
;
...
...
@@ -28,6 +30,10 @@ class Kernel extends ConsoleKernel
KeengCrawlerTrackCommand
::
class
,
CrawlerTrackImageCommand
::
class
,
//ZingCrawlerListenCommand::class,
CrawlerTrackListenCommand
::
class
];
/**
...
...
This diff is collapsed.
Click to expand it.
app/Helpers/Constants.php
View file @
f63f3efd
...
...
@@ -5,6 +5,11 @@ namespace App\Helpers;
class
Constants
{
const
TABLE_ARTISTS
=
'artists'
;
const
TABLE_COUNT_VIEWS
=
'count_views'
;
const
TABLE_CRAWLER_LISTEN_HISTORIES
=
'crawler_listen_histories'
;
const
TABLE_CRAWLER_LISTENS
=
'crawler_listens'
;
const
TABLE_CRONTJOBS
=
'crontjobs'
;
const
TABLE_FAILED_JOBS
=
'failed_jobs'
;
const
TABLE_JOBS
=
'jobs'
;
const
TABLE_MIGRATIONS
=
'migrations'
;
...
...
@@ -19,9 +24,11 @@ class Constants
const
TABLE_PERMISSIONS
=
'permissions'
;
const
TABLE_ROLE_USER
=
'role_user'
;
const
TABLE_ROLES
=
'roles'
;
const
TABLE_TRACK_ARTIST
=
'track_artist'
;
const
TABLE_TRACK_USER
=
'track_user'
;
const
TABLE_TRACKS
=
'tracks'
;
const
TABLE_USER_LOGS
=
'user_logs'
;
const
TABLE_USERS
=
'users'
;
...
...
@@ -117,4 +124,6 @@ class Constants
const
VMUSICCHART_IMG_EMPTY_JPG
=
'/home/aseanvn/public_html/vmusicchart.dcv.vn/uploads/empty-1x1-jpg.jpg'
;
const
VMUSICCHART_IMG_EMPTY_GIF
=
'/home/aseanvn/public_html/vmusicchart.dcv.vn/uploads/empty-1x1-gif.gif'
;
const
CRAWLER_LISTEN_LIMIT
=
500
;
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
app/Helpers/Functions.php
View file @
f63f3efd
<?php
use
App\Helpers\Constants
;
use
Illuminate\Support\Facades\Auth
;
if
(
!
function_exists
(
'includeRouteFiles'
))
{
/**
* Loops through a folder and requires all PHP files
* Searches sub-directories as well.
*
* @param $folder
*/
function
includeRouteFiles
(
$folder
)
{
try
{
$rdi
=
new
recursiveDirectoryIterator
(
$folder
);
$it
=
new
recursiveIteratorIterator
(
$rdi
);
while
(
$it
->
valid
())
{
if
(
!
$it
->
isDot
()
&&
$it
->
isFile
()
&&
$it
->
isReadable
()
&&
$it
->
current
()
->
getExtension
()
===
'php'
)
{
require
$it
->
key
();
}
$it
->
next
();
}
}
catch
(
Exception
$e
)
{
echo
$e
->
getMessage
();
}
}
}
if
(
!
function_exists
(
'processCommonResponse'
))
{
/**
* @param $result
* @param null $data
* @return \Illuminate\Http\JsonResponse
*/
function
processCommonResponse
(
$result
,
$data
=
null
)
{
return
response
()
->
json
(
array
(
'code'
=>
$result
?
Constants
::
CODE_SUCCESS
:
Constants
::
CODE_ERROR
,
'message'
=>
$result
?
Constants
::
MESSAGE_SUCCESS
:
Constants
::
MESSAGE_ERROR
,
'data'
=>
$data
));
}
}
if
(
!
function_exists
(
'generateFilenameUpload'
))
{
/**
* Get filename from file when upload
* @param $file
* @return string
*/
function
generateFilenameUpload
(
$file
)
{
if
(
is_object
(
$file
)
&&
is_file
(
$file
))
{
return
'user_'
.
Auth
::
id
()
.
'_upload_'
.
time
()
.
'.'
.
$file
->
getClientOriginalExtension
();
}
return
'user_'
.
Auth
::
id
()
.
'_upload_'
.
time
();
}
}
if
(
!
function_exists
(
'isAdmin'
))
{
/**
* check is admin
* @return true,false
*/
function
isAdmin
()
{
$query
=
\App\User
::
where
(
'id'
,
Auth
::
Id
());
$query
->
with
([
'roles'
=>
function
(
$roleSql
){
$roleSql
->
select
(
'roles.id'
,
'roles.name'
);
}
]);
$result
=
$query
->
get
()
->
first
();
$role
=
array
();
if
(
!
empty
(
$result
)
&&
count
(
$result
->
roles
)
>
0
){
foreach
(
$result
->
roles
as
$val
){
$role
[]
=
$val
->
name
;
}
}
if
(
in_array
(
'administrator'
,
$role
)
&&
Auth
::
check
()){
return
true
;
}
return
false
;
}
}
/**
* The function check item and return value
*/
if
(
!
function_exists
(
'getArrayItem'
))
{
/**
* Get filename from file when upload
* @param $array
* @param $key
* @return string
*/
function
getArrayItem
(
$array
,
$key
)
{
if
(
is_array
(
$array
)
&&
isset
(
$array
[
$key
]))
{
return
$array
[
$key
];
}
else
{
return
null
;
}
}
}
if
(
!
function_exists
(
'translateKeyWord'
))
{
/**
* Translate special key work
...
...
@@ -125,248 +16,6 @@ if (!function_exists('translateKeyWord')) {
}
}
if
(
!
function_exists
(
'get_browser_name'
))
{
/**
* Get browser name from user agent
*
* @param $user_agent
* @return string
*/
function
get_browser_name
(
$user_agent
)
{
if
(
strpos
(
$user_agent
,
'Opera'
)
||
strpos
(
$user_agent
,
'OPR/'
))
return
'Opera'
;
elseif
(
strpos
(
$user_agent
,
'Edge'
))
return
'edge'
;
elseif
(
strpos
(
$user_agent
,
'Chrome'
))
return
'chrome'
;
elseif
(
strpos
(
$user_agent
,
'Safari'
))
return
'safari'
;
elseif
(
strpos
(
$user_agent
,
'Firefox'
))
return
'firefox'
;
elseif
(
strpos
(
$user_agent
,
'MSIE'
)
||
strpos
(
$user_agent
,
'Trident/7'
))
return
'ie'
;
return
'Other'
;
}
}
if
(
!
function_exists
(
'convertFileEncodingToUTF8'
))
{
/**
* Convert file (csv) encoding to uft-8
*
* @param $filePath
* @return mixed
*/
function
convertFileEncodingToUTF8
(
$filePath
)
{
try
{
if
(
\File
::
exists
(
$filePath
)){
$inputContent
=
file_get_contents
(
$filePath
);
$inputEncoding
=
mb_detect_encoding
(
$inputContent
,
\App\Constants
::
SPECIFY_ENCODING_LIS
);
if
(
strtoupper
(
$inputEncoding
)
==
'JIS'
)
{
$inputEncoding
=
'SJIS'
;
}
if
(
!
empty
(
$inputEncoding
))
{
if
(
strtoupper
(
$inputEncoding
)
!=
\App\Constants
::
OUT_CHARSET
)
{
file_put_contents
(
$filePath
,
iconv
(
$inputEncoding
,
\App\Constants
::
OUT_CHARSET
,
$inputContent
));
}
return
true
;
}
else
{
return
false
;
}
}
else
{
return
false
;
}
}
catch
(
Exception
$e
){
error_log
(
'import encoding: '
.
$e
->
getMessage
());
return
false
;
}
}
}
if
(
!
function_exists
(
'checkArrayNull'
))
{
/**
* Check array null (all item null)
*
* @param array $array
* @return bool
*/
function
checkArrayNull
(
array
$array
)
{
if
(
is_array
(
$array
)
&&
count
(
$array
)
>
0
)
{
$arrayNull
=
array_filter
(
$array
,
'is_null'
);
if
(
count
(
$array
)
===
count
(
$arrayNull
))
{
return
true
;
}
else
{
return
false
;
}
}
else
{
return
false
;
}
}
}
if
(
!
function_exists
(
'isJson'
))
{
/**
* Check JSON format is valid
*
* @param $string
* @return bool
*/
function
isJson
(
$string
)
{
json_decode
(
$string
);
return
(
json_last_error
()
==
JSON_ERROR_NONE
);
}
}
if
(
!
function_exists
(
'getCustomFieldForExport'
))
{
/**
* Get custom field for export csv
*
* @param $customFieldDataAll
* @param $receiverCustomField
* @return array
*/
function
getCustomFieldForExport
(
$customFieldDataAll
,
$receiverCustomField
,
$isSimpleArray
=
true
)
{
if
(
is_array
(
$customFieldDataAll
)
&&
count
(
$customFieldDataAll
)
>
0
)
{
if
(
!
empty
(
$receiverCustomField
))
{
$customFields
=
explode
(
'||'
,
$receiverCustomField
);
}
else
{
return
[];
}
if
(
count
(
$customFields
)
>
1
)
{
unset
(
$customFields
[
count
(
$customFields
)
-
1
]);
}
$data
=
[];
foreach
(
$customFieldDataAll
as
$customValue
)
{
$init
=
null
;
foreach
(
$customFields
as
$value
)
{
preg_match
(
"/^\[(.*):=\](.*)$/"
,
$value
,
$temp
);
if
(
count
(
$temp
)
==
3
)
{
unset
(
$temp
[
0
]);
}
if
(
$customValue
[
'id'
]
==
$temp
[
1
])
{
$init
=
trim
(
$temp
[
2
]);
}
}
if
(
empty
(
$init
))
{
if
(
$isSimpleArray
)
{
$data
[][
$customValue
[
'id'
]]
=
null
;
}
else
{
$data
[]
=
null
;
}
}
else
{
if
(
$isSimpleArray
)
{
$data
[][
$customValue
[
'id'
]]
=
$init
;
}
else
{
$data
[]
=
$init
;
}
}
}
return
$data
;
}
return
[];
}
}
if
(
!
function_exists
(
'getRoleList'
))
{
/**
* Get custom field for export csv
* Default call: getRoleList()
*
* @param $userId
* @param $isCurrentUser
* @param $isArray
*
* @return array
*/
function
getRoleList
(
$userId
=
null
,
$isCurrentUser
=
true
,
$isArray
=
false
)
{
if
(
$isCurrentUser
)
{
$userId
=
\auth
()
->
id
();
}
$user
=
\App\Models\User
::
find
(
$userId
);
if
(
$user
)
{
$arr
=
collect
(
$user
->
roles
)
->
map
(
function
(
$item
)
{
return
$item
->
name
;
})
->
all
();
return
(
$isArray
)
?
$arr
:
implode
(
","
,
$arr
);
}
else
{
return
(
$isArray
)
?
[]
:
''
;
}
}
}
if
(
!
function_exists
(
'getUserListInPartner'
))
{
/**
* Get custom field for export csv
* Default call: getUserListInPartner()
*
* @param $userId
* @param $isCurrentUser
* @param $isObject
*
* @return array
*/
function
getUserListInPartner
(
$userId
=
null
,
$isCurrentUser
=
true
,
$isObject
=
false
)
{
if
(
$isCurrentUser
)
{
$userId
=
\auth
()
->
id
();
}
$user
=
\App\Models\User
::
find
(
$userId
);
if
(
$user
)
{
$users
=
User
::
select
(
'id'
,
'partner_id'
,
'name'
,
'email'
)
->
where
(
'partner_id'
,
$user
->
partner_id
)
->
get
();
if
(
$isObject
)
{
return
$users
;
}
else
{
return
collect
(
$users
)
->
map
(
function
(
$item
)
{
return
$item
->
id
;
})
->
all
();
}
}
else
{
return
[];
}
}
}
if
(
!
function_exists
(
'getBirthdayEmailTemplateFromFile'
))
{
/**
* Hàm lấy template từ file html gửi mail chúc mừng sinh nhật
*
*/
function
getBirthdayEmailTemplateFromFile
()
{
try
{
$path_file
=
public_path
(
Constants
::
BIRTHDAY_EMAIL_TEMPLATE_FROM_PUBLIC
.
Constants
::
BIRTHDAY_EMAIL_TEMPLATE_FILENAME
);
if
(
\File
::
exists
(
$path_file
))
{
$email_template_path
=
storage_path
(
Constants
::
BIRTHDAY_EMAIL_TEMPLATE_FROM_STORAGE
.
Constants
::
BIRTHDAY_EMAIL_TEMPLATE_FILENAME
);
$email_template_file
=
fopen
(
$email_template_path
,
'r'
);
$email_template_data
=
fread
(
$email_template_file
,
filesize
(
$email_template_path
));
fclose
(
$email_template_file
);
return
$email_template_data
;
}
return
null
;
}
catch
(
Exception
$e
)
{
return
null
;
}
}
}
if
(
!
function_exists
(
'sendRequest'
))
{
function
sendRequest
(
$url
,
$params
=
array
(),
$method
=
'POST'
,
$isJSON
=
true
,
$isAuthen
=
false
,
$timeOut
=
60
)
{
...
...
@@ -413,46 +62,6 @@ if (!function_exists('sendRequest')) {
}
}
if
(
!
function_exists
(
'dataResponse'
))
{
function
dataResponse
(
$code
,
$message
,
$data
)
{
return
[
'code'
=>
$code
,
'message'
=>
$message
,
'data'
=>
$data
];
}
}
if
(
!
function_exists
(
'checkTaxCode'
))
{
function
checkTaxCode
(
$taxcode
)
{
$vn_taxcode
=
'/^[0-9]{10}$|^[0-9]{10}-[0-9]{2}[1-9]{1}$/'
;
if
(
preg_match
(
$vn_taxcode
,
$taxcode
))
{
$prefix_input
=
substr
(
$taxcode
,
0
,
3
);
$array_prefix
=
config
(
'validator.tax_code_by_province'
);
if
(
count
(
$array_prefix
)
>
0
&&
in_array
(
$prefix_input
,
$array_prefix
))
{
$tax_code
=
substr
(
$taxcode
,
0
,
10
);
if
(
strlen
(
$tax_code
)
==
10
)
{
$total
=
31
*
$tax_code
[
0
];
$total
+=
29
*
$tax_code
[
1
];
$total
+=
23
*
$tax_code
[
2
];
$total
+=
19
*
$tax_code
[
3
];
$total
+=
17
*
$tax_code
[
4
];
$total
+=
13
*
$tax_code
[
5
];
$total
+=
7
*
$tax_code
[
6
];
$total
+=
5
*
$tax_code
[
7
];
$total
+=
3
*
$tax_code
[
8
];
if
(
$tax_code
[
9
]
==
(
10
-
(
$total
%
11
)))
{
return
true
;
}
return
false
;
}
return
false
;
}
return
false
;
}
}
}
if
(
!
function_exists
(
'getDom'
))
{
function
getDom
(
$link
)
{
...
...
@@ -466,186 +75,6 @@ if (!function_exists('getDom')) {
}
}
if
(
!
function_exists
(
'getNotificationStatus'
))
{
function
getNotificationStatus
(
$name
,
$status
)
{
$badge
=
$name
.
' '
;
switch
(
$status
)
{
case
0
:
$badge
.=
'<span class="badge badge-secondary" style="float: right">Chưa đọc</span>'
;
break
;
case
1
:
$badge
.=
'<span class="badge badge-primary" style="float: right">Đã đọc</span>'
;
break
;
case
2
:
$badge
.=
'<span class="badge badge-danger" style="float: right">Đã xóa</span>'
;
break
;
default
:
}
return
$badge
;
}
}
if
(
!
function_exists
(
'getProjectStatus'
))
{
function
getProjectStatus
(
$name
,
$status
)
{
$badge
=
$name
.
' '
;
switch
(
$status
)
{
case
0
:
$badge
.=
'<span class="badge badge-secondary" style="float: right">Bản nháp</span>'
;
break
;
case
1
:
$badge
.=
'<span class="badge badge-info" style="float: right">Chờ duyệt</span>'
;
break
;
case
2
:
$badge
.=
'<span class="badge badge-primary" style="float: right">Đã duyệt</span>'
;
break
;
case
3
:
$badge
.=
'<span class="badge badge-warning" style="float: right">Đang thực hiện</span>'
;
break
;
case
4
:
$badge
.=
'<span class="badge badge-success" style="float: right">Hoàn thành</span>'
;
break
;
case
5
:
$badge
.=
'<span class="badge badge-danger" style="float: right">Tạm dừng</span>'
;
break
;
default
:
}
return
$badge
;
}
}
if
(
!
function_exists
(
'getTaskStatus'
))
{
function
getTaskStatus
(
$name
,
$status
)
{
$badge
=
$name
.
' '
;
switch
(
$status
)
{
case
0
:
$badge
.=
'<span class="badge badge-secondary" style="float: right">Bản nháp</span>'
;
break
;
case
1
:
$badge
.=
'<span class="badge badge-info" style="float: right">Đã duyệt</span>'
;
break
;
case
2
:
$badge
.=
'<span class="badge badge-primary" style="float: right">Đã giao</span>'
;
break
;
case
3
:
$badge
.=
'<span class="badge badge-warning" style="float: right">Đang thực hiện</span>'
;
break
;
case
4
:
$badge
.=
'<span class="badge badge-success" style="float: right">Hoàn thành</span>'
;
break
;
case
5
:
$badge
.=
'<span class="badge badge-danger" style="float: right">Tạm dừng</span>'
;
break
;
case
6
:
$badge
.=
'<span class="badge badge-dark" style="float: right">Chuyển tiếp</span>'
;
break
;
default
:
}
return
$badge
;
}
}
if
(
!
function_exists
(
'getUserStatus'
))
{
function
getUserStatus
(
$name
,
$status
)
{
$badge
=
$name
.
' '
;
switch
(
$status
)
{
case
0
:
$badge
.=
'<span class="badge badge-secondary" style="float: right">Chưa kích hoạt</span>'
;
break
;
case
1
:
$badge
.=
'<span class="badge badge-info" style="float: right">Đã kích hoạt</span>'
;
break
;
case
2
:
$badge
.=
'<span class="badge badge-warning" style="float: right">Tạm khóa</span>'
;
break
;
case
3
:
$badge
.=
'<span class="badge badge-danger" style="float: right">Đã nghỉ làm</span>'
;
break
;
default
:
}
return
$badge
;
}
}
if
(
!
function_exists
(
'validateMobile'
))
{
function
validateMobile
(
$mobile
)
{
if
(
$mobile
==
""
||
$mobile
==
null
)
return
false
;
$start_pattern
=
"/"
;
$end_pattern
=
"/"
;
$viettel_pattern
=
$start_pattern
;
$viettel_pattern
.=
"^8498\d
{
7}$|^0?98\d{7}$|^98\d{7
}
$"
;
$viettel_pattern
.=
"|^8497\d
{
7}$|^0?97\d{7}$|^97\d{7
}
$"
;
$viettel_pattern
.=
"|^8496\d
{
7}$|^0?96\d{7}$|^96\d{7
}
$"
;
$viettel_pattern
.=
"|^8432\d
{
7}$|^0?32\d{7}$|^32\d{7
}
$"
;
$viettel_pattern
.=
"|^8433\d
{
7}$|^0?33\d{7}$|^33\d{7
}
$"
;
$viettel_pattern
.=
"|^8434\d
{
7}$|^0?34\d{7}$|^34\d{7
}
$"
;
$viettel_pattern
.=
"|^8435\d
{
7}$|^0?35\d{7}$|^35\d{7
}
$"
;
$viettel_pattern
.=
"|^8436\d
{
7}$|^0?36\d{7}$|^36\d{7
}
$"
;
$viettel_pattern
.=
"|^8437\d
{
7}$|^0?37\d{7}$|^37\d{7
}
$"
;
$viettel_pattern
.=
"|^8438\d
{
7}$|^0?38\d{7}$|^38\d{7
}
$"
;
$viettel_pattern
.=
"|^8439\d
{
7}$|^0?39\d{7}$|^39\d{7
}
$"
;
$viettel_pattern
.=
"|^8486\d
{
7}$|^0?86\d{7}$|^86\d{7
}
$"
;
$vinaphone_pattern
=
$viettel_pattern
;
$vinaphone_pattern
.=
"|^8491\d
{
7}$|^0?91\d{7}$|^91\d{7
}
$"
;
$vinaphone_pattern
.=
"|^8494\d
{
7}$|^0?94\d{7}$|^94\d{7
}
$"
;
$vinaphone_pattern
.=
"|^8481\d
{
7}$|^0?81\d{7}$|^81\d{7
}
$"
;
$vinaphone_pattern
.=
"|^8482\d
{
7}$|^0?82\d{7}$|^82\d{7
}
$"
;
$vinaphone_pattern
.=
"|^8483\d
{
7}$|^0?83\d{7}$|^83\d{7
}
$"
;
$vinaphone_pattern
.=
"|^8484\d
{
7}$|^0?84\d{7}$|^84\d{7
}
$"
;
$vinaphone_pattern
.=
"|^8485\d
{
7}$|^0?85\d{7}$|^85\d{7
}
$"
;
$vinaphone_pattern
.=
"|^8488\d
{
7}$|^0?88\d{7}$|^88\d{7
}
$"
;
$mobifone_pattern
=
$vinaphone_pattern
;
$mobifone_pattern
.=
"|^8490\d
{
7}$|^0?90\d{7}$|^90\d{7
}
$"
;
$mobifone_pattern
.=
"|^8493\d
{
7}$|^0?93\d{7}$|^93\d{7
}
$"
;
$mobifone_pattern
.=
"|^8470\d
{
7}$|^0?70\d{7}$|^70\d{7
}
$"
;
$mobifone_pattern
.=
"|^8476\d
{
7}$|^0?76\d{7}$|^76\d{7
}
$"
;
$mobifone_pattern
.=
"|^8477\d
{
7}$|^0?77\d{7}$|^77\d{7
}
$"
;
$mobifone_pattern
.=
"|^8478\d
{
7}$|^0?78\d{7}$|^78\d{7
}
$"
;
$mobifone_pattern
.=
"|^8479\d
{
7}$|^0?79\d{7}$|^79\d{7
}
$"
;
$mobifone_pattern
.=
"|^8489\d
{
7}$|^0?89\d{7}$|^89\d{7
}
$"
;
$vietnamobile_pattern
=
$mobifone_pattern
;
$vietnamobile_pattern
.=
"|^8492\d
{
7}$|^0?92\d{7}$|^92\d{7
}
$"
;
$vietnamobile_pattern
.=
"|^8456\d
{
7}$|^0?56\d{7}$|^56\d{7
}
$"
;
$vietnamobile_pattern
.=
"|^8458\d
{
7}$|^0?58\d{7}$|^58\d{7
}
$"
;
$vietnamobile_pattern
.=
$end_pattern
;
// $landline_pattern = /^84203\d{8}$|^0?203\d{8}$|^203\d{8}$|^84204\d{8}$|^0?204\d{8}$|^204\d{8}$|^84205\d{8}$|^0?205\d{8}$|^205\d{8}$|^84206\d{8}$|^0?206\d{8}$|^206\d{8}$|^84207\d{8}$|^0?207\d{8}$|^207\d{8}$|^84208\d{8}$|^0?208\d{8}$|^208\d{8}$|^84209\d{8}$|^0?209\d{8}$|^209\d{8}$|^84210\d{8}$|^0?210\d{8}$|^210\d{8}$|^84211\d{8}$|^0?211\d{8}$|^211\d{8}$|^84212\d{8}$|^0?212\d{8}$|^212\d{8}$|^84213\d{8}$|^0?213\d{8}$|^213\d{8}$|^84214\d{8}$|^0?214\d{8}$|^214\d{8}$|^84215\d{8}$|^0?215\d{8}$|^215\d{8}$|^84216\d{8}$|^0?216\d{8}$|^216\d{8}$|^84218\d{8}$|^0?218\d{8}$|^218\d{8}$|^84219\d{8}$|^0?219\d{8}$|^219\d{8}$|^84220\d{8}$|^0?220\d{8}$|^220\d{8}$|^84221\d{8}$|^0?221\d{8}$|^221\d{8}$|^84222\d{8}$|^0?222\d{8}$|^222\d{8}$|^84225\d{8}$|^0?225\d{8}$|^225\d{8}$|^84226\d{8}$|^0?226\d{8}$|^226\d{8}$|^84227\d{8}$|^0?227\d{8}$|^227\d{8}$|^84228\d{8}$|^0?228\d{8}$|^228\d{8}$|^84229\d{8}$|^0?229\d{8}$|^229\d{8}$|^84232\d{8}$|^0?232\d{8}$|^232\d{8}$|^84233\d{8}$|^0?233\d{8}$|^233\d{8}$|^84234\d{8}$|^0?234\d{8}$|^234\d{8}$|^84235\d{8}$|^0?235\d{8}$|^235\d{8}$|^84236\d{8}$|^0?236\d{8}$|^236\d{8}$|^84237\d{8}$|^0?237\d{8}$|^237\d{8}$|^84238\d{8}$|^0?238\d{8}$|^238\d{8}$|^84239\d{8}$|^0?239\d{8}$|^239\d{8}$|^8424\d{8}$|^0?24\d{8}$|^24\d{8}$|^84251\d{8}$|^0?251\d{8}$|^251\d{8}$|^84252\d{8}$|^0?252\d{8}$|^252\d{8}$|^84254\d{8}$|^0?254\d{8}$|^254\d{8}$|^84255\d{8}$|^0?255\d{8}$|^255\d{8}$|^84256\d{8}$|^0?256\d{8}$|^256\d{8}$|^84257\d{8}$|^0?257\d{8}$|^257\d{8}$|^84258\d{8}$|^0?258\d{8}$|^258\d{8}$|^84259\d{8}$|^0?259\d{8}$|^259\d{8}$|^84260\d{8}$|^0?260\d{8}$|^260\d{8}$|^84261\d{8}$|^0?261\d{8}$|^261\d{8}$|^84262\d{8}$|^0?262\d{8}$|^262\d{8}$|^84263\d{8}$|^0?263\d{8}$|^263\d{8}$|^84269\d{8}$|^0?269\d{8}$|^269\d{8}$|^84270\d{8}$|^0?270\d{8}$|^270\d{8}$|^84271\d{8}$|^0?271\d{8}$|^271\d{8}$|^84272\d{8}$|^0?272\d{8}$|^272\d{8}$|^84273\d{8}$|^0?273\d{8}$|^273\d{8}$|^84274\d{8}$|^0?274\d{8}$|^274\d{8}$|^84275\d{8}$|^0?275\d{8}$|^275\d{8}$|^84276\d{8}$|^0?276\d{8}$|^276\d{8}$|^84277\d{8}$|^0?277\d{8}$|^277\d{8}$|^8428\d{8}$|^0?28\d{8}$|^28\d{8}$|^84290\d{8}$|^0?290\d{8}$|^290\d{8}$|^84291\d{8}$|^0?291\d{8}$|^291\d{8}$|^84292\d{8}$|^0?292\d{8}$|^292\d{8}$|^84293\d{8}$|^0?293\d{8}$|^293\d{8}$|^84294\d{8}$|^0?294\d{8}$|^294\d{8}$|^84296\d{8}$|^0?296\d{8}$|^296\d{8}$|^84297\d{8}$|^0?297\d{8}$|^297\d{8}$|^84299\d{8}$|^0?299\d{8}$|^299\d{8}$/;
if
(
preg_match
(
$vietnamobile_pattern
,
$mobile
))
{
return
true
;
}
else
{
return
false
;
}
}
}
if
(
!
function_exists
(
'formatMobile'
))
{
function
formatMobile
(
$mobile
)
{
$res_format
=
''
;
if
(
validateMobile
(
$mobile
))
{
switch
(
strlen
(
$mobile
))
{
case
9
:
$res_format
=
'84'
.
$mobile
;
break
;
case
10
:
$res_format
=
'84'
.
substr
(
$mobile
,
1
);
break
;
case
11
:
$res_format
=
$mobile
;
default
:
}
}
return
$res_format
;
}
}
if
(
!
function_exists
(
'curlZingMp3'
))
{
function
curlZingMp3
(
$url
)
{
$ch
=
curl_init
();
...
...
@@ -749,4 +178,52 @@ if (!function_exists('cURL')) {
}
}
if
(
!
function_exists
(
'getZingUrlGetCounter'
))
{
/**
* Hàm tạo URL cho từng bài hát dựa vào ID chuỗi của nó để lấy lượt nghe
* https://mp3.zing.vn/xhr/get-counter?id='. $idTrack .'&type=audio
*
* @param $id_str
* @param string $type
* @return string
*/
function
getZingUrlGetCounter
(
$id_str
,
$type
=
'audio'
)
{
$url
=
'https://mp3.zing.vn/xhr/get-counter?'
;
$url
.=
'id='
.
$id_str
;
$url
.=
'&type='
.
$type
;
return
$url
;
}
}
if
(
!
function_exists
(
'getNctUrlGetCounter'
))
{
/**
* Hàm tạo URL cho từng bài hát dựa vào ID của nó để lấy lượt nghe
* https://www.nhaccuatui.com/interaction/api/counter?listSongIds=6238530
*
* @param $id
* @return string
*/
function
getNctUrlGetCounter
(
$id
)
{
$url
=
'https://www.nhaccuatui.com/interaction/api/counter?'
;
$url
.=
'listSongIds='
.
$id
;
return
$url
;
}
}
if
(
!
function_exists
(
'getKeengUrlGetCounter'
))
{
/**
* Hàm tạo URL cho từng bài hát dựa vào ID của nó để lấy lượt nghe
* http://vip.service.keeng.vn:8080/KeengWSRestful///ws/common/getSong?identify=IGm9Y2XF
*
* @param $id
* @return string
*/
function
getKeengUrlGetCounter
(
$id
)
{
$url
=
'http://vip.service.keeng.vn:8080/KeengWSRestful///ws/common/getSong?'
;
$url
.=
'identify='
.
$id
;
return
$url
;
}
}
This diff is collapsed.
Click to expand it.
app/Models/CrawlerListen.php
0 → 100644
View file @
f63f3efd
<?php
namespace
App\Models
;
use
App\Helpers\Constants
;
use
Illuminate\Database\Eloquent\Model
;
class
CrawlerListen
extends
Model
{
protected
$table
=
Constants
::
TABLE_CRAWLER_LISTENS
;
public
$timestamps
=
true
;
protected
$fillable
=
[
'track_id'
,
'yesterday_zing'
,
'yesterday_nct'
,
'yesterday_nhacvn'
,
'yesterday_keeng'
,
'today_zing'
,
'today_nct'
,
'today_nhacvn'
,
'today_keeng'
,
'date_zing'
,
'date_nct'
,
'date_nhacvn'
,
'date_keeng'
,
'week_zing'
,
'week_nct'
,
'week_nhacvn'
,
'week_keeng'
,
'month_zing'
,
'month_nct'
,
'week_nhacvn'
,
'month_keeng'
,
'year_zing'
,
'year_nct'
,
'year_nhacvn'
,
'year_keeng'
,
'alltime_zing'
,
'alltime_nct'
,
'alltime_nhacvn'
,
'alltime_keeng'
,
'zing_crawler_at'
,
'nct_crawler_at'
,
'nhacvn_crawler_at'
,
'keeng_crawler_at'
];
}
This diff is collapsed.
Click to expand it.
app/Models/CrawlerListenHistory.php
0 → 100644
View file @
f63f3efd
<?php
namespace
App\Models
;
use
App\Helpers\Constants
;
use
Illuminate\Database\Eloquent\Model
;
class
CrawlerListenHistory
extends
Model
{
protected
$table
=
Constants
::
TABLE_CRAWLER_LISTEN_HISTORIES
;
public
$timestamps
=
true
;
protected
$fillable
=
[
'track_id'
,
'zing_count'
,
'nct_count'
,
'nhacvn_count'
,
'keeng_count'
];
}
This diff is collapsed.
Click to expand it.
app/Models/Crontjob.php
View file @
f63f3efd
...
...
@@ -2,11 +2,12 @@
namespace
App\Models
;
use
App\Helpers\Constants
;
use
Illuminate\Database\Eloquent\Model
;
class
Crontjob
extends
Model
{
protected
$table
=
'crontjobs'
;
protected
$table
=
Constants
::
TABLE_CRONTJOBS
;
public
$timestamps
=
true
;
...
...
This diff is collapsed.
Click to expand it.
app/Repositories/TrackRepository.php
View file @
f63f3efd
...
...
@@ -2,6 +2,8 @@
namespace
App\Repositories
;
use
App\Helpers\Constants
;
use
App\Models\CrawlerListen
;
use
App\Models\Track
;
use
Sunra\PhpSimple\HtmlDomParser
;
use
Yangqi\Htmldom\Htmldom
;
...
...
@@ -279,5 +281,88 @@ class TrackRepository extends BaseRepository
return
$result
;
}
/**
* Lấy ds bài hát chưa lấy lượt nghe trong ngày theo từng hệ thống nhạc
* Bài nào đã lấy rồi thì sẽ ko lấy nữa
* Mỗi lần quét 500 bài cho đến hết
*
* @param string $src
* @param $crawlered
* @param int $limit
*
* @return array
*/
public
function
getTrackBySource
(
$src
=
'zing'
,
$crawlered
,
$limit
=
Constants
::
CRAWLER_LISTEN_LIMIT
)
{
$query
=
Track
::
select
([
'id'
,
'id_zing'
,
'id_nct'
,
'id_nhacvn'
,
'id_keeng'
,
'title'
]);
if
(
is_array
(
$crawlered
)
&&
count
(
$crawlered
)
>
0
)
{
$query
->
whereNotIn
(
'id'
,
$crawlered
);
}
switch
(
$src
)
{
case
'zing'
:
$query
->
whereNotNull
(
'id_zing'
)
->
where
(
'id_zing'
,
'<>'
,
''
);
break
;
case
'nct'
:
$query
->
whereNotNull
(
'id_nct'
)
->
where
(
'id_nct'
,
'<>'
,
''
);
break
;
case
'nhacvn'
:
$query
->
whereNotNull
(
'id_nhacvn'
)
->
where
(
'id_nhacvn'
,
'<>'
,
''
);
break
;
case
'keeng'
:
$query
->
whereNotNull
(
'id_keeng'
)
->
where
(
'id_keeng'
,
'<>'
,
''
);
break
;
}
$query
->
take
((
$limit
<
1
)
?
Constants
::
CRAWLER_LISTEN_LIMIT
:
$limit
);
return
$query
->
get
()
->
toArray
();
}
/**
* Lấy ds những bài hát đã lấy lượt nghe trong ngày, để lần quét sau sẽ bỏ qua
* Mỗi lần quét 300-500 bài trong tracks và bỏ qua những bài đã lấy lượt nghe trong ngày ở bảng crawler_listens
* Lấy những bài hát có lượng nghe trong ngày = 0 để cập nhật lại
* Có thể tùy biến thêm ($is_update_all): cập nhật toàn bộ hoặc chỉ cập nhập những bài chưa lấy lượt nghe
*
* @param string $src
* @param boolean $is_update_all
*
* @return array
*/
public
function
getCrawlerListenInserted
(
$src
=
'zing'
,
$is_update_all
=
false
)
{
$min_date
=
date
(
'Y-m-d 00:00:00'
);
$max_date
=
date
(
'Y-m-d 23:59:59'
);
if
(
$is_update_all
)
{
$min_date
=
date
(
'Y-m-d 00:00:00'
,
time
()
+
86400
);
$max_date
=
date
(
'Y-m-d 23:59:59'
,
time
()
+
86400
);
}
$query
=
CrawlerListen
::
select
([
'id'
,
'track_id'
]);
switch
(
$src
)
{
case
'zing'
:
$query
->
where
(
'zing_crawler_at'
,
'>='
,
$min_date
)
->
where
(
'zing_crawler_at'
,
'<='
,
$max_date
)
->
where
(
'today_zing'
,
'>'
,
0
);
break
;
case
'nct'
:
$query
->
where
(
'nct_crawler_at'
,
'>='
,
$min_date
)
->
where
(
'nct_crawler_at'
,
'<='
,
$max_date
)
->
where
(
'today_nct'
,
'>'
,
0
);
break
;
case
'nhacvn'
:
$query
->
where
(
'nhacvn_crawler_at'
,
'>='
,
$min_date
)
->
where
(
'nhacvn_crawler_at'
,
'<='
,
$max_date
)
->
where
(
'today_nhacvn'
,
'>'
,
0
);
break
;
case
'keeng'
:
$query
->
where
(
'keeng_crawler_at'
,
'>='
,
$min_date
)
->
where
(
'keeng_crawler_at'
,
'<='
,
$max_date
)
->
where
(
'today_keeng'
,
'>'
,
0
);
break
;
}
$result
=
$query
->
get
();
return
collect
(
$result
)
->
map
(
function
(
$item
)
{
return
$item
->
track_id
;
})
->
all
();
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
config/api.php
View file @
f63f3efd
...
...
@@ -85,6 +85,13 @@ return [
'api_get_rank'
=>
'http://vip.service.keeng.vn:8080/KeengWSRestful//ws/common/getRankDetail?item_type=1&rank_type=50'
],
'listen'
=>
[
'zing'
=>
'https://mp3.zing.vn/xhr/get-counter?id=ZWB0EF7E&type=audio'
,
'nct'
=>
'https://www.nhaccuatui.com/interaction/api/counter?listSongIds=6238530'
,
'nhacvn'
=>
null
,
'keeng'
=>
null
],
];
This diff is collapsed.
Click to expand it.
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