作者 主題: 分享給還在用舊版千千靜聽  (閱讀 6389 次)

0 會員 與 1 訪客 正在閱讀本文。

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
分享給還在用舊版千千靜聽
« 於: 2015-04-21 18:38 »
天阿 ... 50 行不到 ... 花了我 4 小時


應該去年千千靜聽 (我用 5.7 版) 抓歌詞就漸漸錯誤了
可能是大陸越來越不注意台灣流行音樂
所以較新的歌都沒歌詞 , 甚至抓到歌名相近卻不同首的大陸流行樂

小弟就把自動下載歌詞關掉
手動編輯 lrc 檔

先給建議 ..
1. 至少把 "下載後自動覆蓋" 關閉 , 小弟沒把握抓到是正確
使用手動搜尋歌詞 , 若舊檔存在 , 就另外命名檔案
再使用 "歌詞關聯" 決定留不留

2.
findlrc01 使用 google 搜尋歌手+歌曲 , 從 mojin (魔鏡歌詞網) 抓
原本想先代替去把 (hosts 位置) 站裡的資料 file 回來確認 ...
寫到最後 , 乾脆 google + 完直接貼 bash (吃飯時間近了)
可增加其他方法 findlrc02 ... findlrc03



以下解法 .. (須有自己的 web server)
1.
將聽歌的桌機 hosts 檔增加
代碼: [選擇]
192.168.8.80 ccnc.qianqian.com
192.168.8.80 cct2.qianqian.com
192.168.8.80 ttlrccnc.qianqian.com
192.168.8.80 ttlrcct.qianqian.com

2.
php.conf 增加 php 副檔名 dll (我是 8.80 web server 那台)
代碼: [選擇]
AddHandler php5-script .php .dll
AddType text/html .php .dll

3. 將底下 php 檔存成 /var/www/html/dll/lyricsvr.dll
代碼: [選擇]
<?php
session_id
("lrcdirtmp");
session_start();


function 
unicode_decode($strs){
$restr='';
for($i=0;$i<strlen($strs);$i+=4){
$tmpstr=substr($strs,$i,4);
$tmpstr=chr(base_convert(substr($tmpstr,0,2),16,10)).chr(base_convert(substr($tmpstr,2,2),16,10));
$tmpstr=iconv('UCS-2''UTF-8'$tmpstr);
$restr.=$tmpstr;
}
return $restr;
}

function 
findlrc01($name,$song){
// 魔鏡歌詞網
$tmpstr='LANG=zh_TW.UTF-8;lynx --dump "$(lynx '."--dump 'http://www.google.com.tw/search?q=$name+$song+歌詞&gws_rd=ssl' | grep mojim | ".'head -1 | awk "{print \$1}")" | sed "s/^[ \t]*//g" | grep -E "^\\[ti:|^\\[ar:|^\\[al:|[00-59]:[00-59]" ';
system($tmpstr);
}

if(@
$_GET['dl?Id']!=""){
findlrc01($_SESSION['a'][$_GET['dl?Id']]['歌手'],$_SESSION['a'][$_GET['dl?Id']]['歌名']);
}else{
$tmpstr=time();

$_SESSION['a'][$tmpstr]['歌手']=iconv("BIG5","UTF-8",iconv("gb2312","BIG5",iconv("UTF-8","gb2312",unicode_decode($_GET['Title']))));
$_SESSION['a'][$tmpstr]['歌名']=iconv("BIG5","UTF-8",iconv("gb2312","BIG5",iconv("UTF-8","gb2312",unicode_decode($_GET['sh?Artist']))));

echo '<?xml version="1.0" encoding="UTF-8" ?>
'."\n";
echo '<result>'."\n";
echo ' <lrc id="'.$tmpstr.'" artist='.$_SESSION['a'][$tmpstr]['歌手'].' title="'.$_SESSION['a'][$tmpstr]['歌名'].'"></lrc>'."\n";
echo '</result>'."\n";

}



$oldist=array_keys($_SESSION['a']);
$nowtimeu=time();
for($i=0;$i<count($oldist);$i++){
if($nowtimeu-$oldist[$i]>600){
unset($_SESSION['a'][$oldist[$i]]);
}
}


?>




ps ..
千千靜聽發出查詢
http://ttlrccnc.qianqian.com/dll/lyricsvr.dll?sh?Artist=E180875B015A&Title=3172315C2F66&Flags=0&ci=6111756532545c3a5316101c0219106c5622292758564444141c464808425c5353011d01
千千靜聽發出要檔
http://ttlrccnc.qianqian.com/dll/lyricsvr.dll?dl?Id=783662&Code=163128925&ci=6111756532545c3a5316101c0219106c5622292758564444141c464808425c5353011d01


剛發現一個問題
當抓下來的魔鏡網頁中 , 同時有兩首以上歌詞
全抓存檔 , 但千千靜聽視 "第一首歌歌詞=[時間值]" + "最後一首歌標題=[標籤值]" 有效

« 上次編輯: 2015-04-21 20:13 由 dark »

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
Re: 分享給還在用舊版千千靜聽
« 回覆 #1 於: 2015-04-23 16:11 »
代碼: [選擇]
function findlrc02($name,$song){
$tmpp=file("http://www.google.com.tw/search?q=$name+$song+歌詞&gws_rd=ssl");
for ($i=0;$i<count($tmpp);$i++){
$buffer = strip_tags($tmpp[$i]);
$buffer = iconv("BIG5","UTF-8",$buffer);
if(strpos($buffer,"mojim.com/")){
$okurl="http://".preg_replace("/htm.*/","htm",strstr($buffer,"mojim.com/"));
break;
}
}

$tmpp=file("$okurl");
foreach($tmpp as $key => $val){
//$buffer = strip_tags(preg_replace("/<br \/>/","\n",$val));
$buffer = explode("<br />",$val);
foreach($buffer as $a => $b){
if(preg_match("/^\[[00-59]?[00-59]/",strip_tags($b))){
echo strip_tags($b)."\n";
}
}
}
}

與 function01 一樣 , 只是使用 php
這樣就能找免費 php 空間 , 又剛好能申請 dll 這帳號 , 還能用 ip 連

不過明明跟 bash 動作一樣 , 卻有不同結果
反正目前兩 function 二選一找 ... 還沒出錯

另外 .. 上篇問題一首歌兩歌詞問題
千千靜聽有時也出現同時 show 兩首歌詞
至於過濾出該歌曲歌詞 , 目前無解 , 因為有些歌詞沒 [ti:傷心的人別聽慢歌] 這標籤

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
Re: 分享給還在用舊版千千靜聽
« 回覆 #2 於: 2015-04-30 19:04 »
回應清單
改為所有搜尋 function 一起跑
且多顯示歌詞前 5 行供人為判斷

ps:
pcntl_fork 子程序寫完才發現
我的 web server 沒支援
最近這台還有任務 , 所以不想動到系統環境
但 pcntl_fork 部分註解起來跑是 OK 的

代碼: [選擇]
<?php
session_id
("lrcdirtmp");
session_start();


function 
unicode_decode($strs){
$restr='';
for($i=0;$i<strlen($strs);$i+=4){
$tmpstr=substr($strs,$i,4);
$tmpstr=chr(base_convert(substr($tmpstr,0,2),16,10)).chr(base_convert(substr($tmpstr,2,2),16,10));
$tmpstr=iconv('UCS-2''UTF-8'$tmpstr);
$restr.=$tmpstr;
}
return $restr;
}
function 
cutlines($strs){
$tmparr=explode("\n",$strs);
//$strs=preg_replace("/\[.*\]/","",preg_match("/00/",$strs));
//$strs=preg_match("/00/",$strs);
$showline=5;
$showdata='';
for($i=0;$i<count($tmparr);$i++){
if(preg_match("/\[00/",$tmparr[$i])){
$tmpstr=preg_replace("/\[.*\]/","",$tmparr[$i]);
if(strlen($tmpstr)>2){
$showdata.=$tmpstr.",";
$showline--;
if($showline<=0)break;
}
}
}
return $showdata;
}


function 
findlrc01($name,$song){
// 魔鏡歌詞網
$tmpstr='LANG=zh_TW.UTF-8;lynx --dump "$(lynx '."--dump 'http://www.google.com.tw/search?q=$name+$song+歌詞&gws_rd=ssl' | grep mojim | ".'head -1 | awk "{print \$1}")" | sed "s/^[ \t]*//g" | grep -E "^\\[ti:|^\\[ar:|^\\[al:|[00-59]:[00-59]" | grep "^\\["';
exec($tmpstr,$tmparr);
return implode("\n",$tmparr);
}

function 
findlrc02($name,$song){
$tmpp=file("http://www.google.com.tw/search?q=$name+$song+歌詞&gws_rd=ssl");
for ($i=0;$i<count($tmpp);$i++){
$buffer strip_tags($tmpp[$i]);
$buffer iconv("BIG5","UTF-8",$buffer);
if(strpos($buffer,"mojim.com/")){
$okurl="http://".preg_replace("/htm.*/","htm",strstr($buffer,"mojim.com/"));
break;
}
}

$showstr='';
$tmpp=file("$okurl");
foreach($tmpp as $key => $val){
//$buffer = strip_tags(preg_replace("/<br \/>/","\n",$val));
$buffer explode("<br />",$val);
foreach($buffer as $a => $b){
if(preg_match("/^\[[00-59]?[00-59]/",strip_tags($b))){
$showstr.=strip_tags($b)."\n";
}
}
}
return $showstr;
}

$ffuns=2;
$reipid=$_SERVER["REMOTE_ADDR"];
$reipid=preg_replace("/\./","+",$reipid);
eval(
'$reipid=sprintf("%03d",'.$reipid.');');

if(@
$_GET['dl?Id']!=""){
//限 10 位數字=時時分分秒秒(ip x 3)(function x 1)
//開頭數字不為零 

echo $_SESSION['a'][$_GET['dl?Id']]['歌詞'];
}else{
@$tmpstr=(date("His")+100000).$reipid;

$counttime=time();
echo '<?xml version="1.0" encoding="UTF-8" ?>
'."\n";
echo '<result>'."\n";
// $children=array();
for($i=1;$i<=$ffuns;$i++){
// $pid=pcntl_fork();
// if($pid){
// $children[]=$pid;
// }else{
$tindex=$tmpstr.$i;
$_SESSION['a'][$tindex]['歌手']=iconv("BIG5","UTF-8",iconv("gb2312","BIG5",iconv("UTF-8","gb2312",preg_replace("/ /","+",unicode_decode($_GET['Title'])))));
$_SESSION['a'][$tindex]['歌名']=iconv("BIG5","UTF-8",iconv("gb2312","BIG5",iconv("UTF-8","gb2312",preg_replace("/ /","+",unicode_decode($_GET['sh?Artist'])))));
// 須收 utf8
$songstr="findlrc0".$i."('".$_SESSION['a'][$tindex]['歌手']."','".$_SESSION['a'][$tindex]['歌名']."');";
eval('$songstr='.$songstr);
$_SESSION['a'][$tindex]['歌詞']=$songstr;
$show=' 歌詞:'.cutlines($songstr);
echo ' <lrc id="'.$tindex.'" artist='.$_SESSION['a'][$tindex]['歌名'].' title="'.$_SESSION['a'][$tindex]['歌手'].$show.'"></lrc>'."\n";
// }
}

// foreach($children as $pid){
// pcntl_waitpid($pid, $status);
// }

echo '</result>'."\n";
echo 'use time:  '.(time()-$counttime).' sec';
}



$oldist=array_keys($_SESSION['a']);
@$nowtimeu=(date("His")+100000);
for($i=0;$i<count($oldist);$i++){
if($nowtimeu-substr($oldist[$i],0,6)>100){ //1min
unset($_SESSION['a'][$oldist[$i]]);
}
}


?>