2017-04-03 77 views
-1

我正在研究一些PHP代碼,它將從遠程廣播頁面抓取音樂播放列表 - 這意味着它不斷更新。 我想在我的數據庫中存儲曲目歷史記錄。網頁抓取:如何檢測列表中的新項目?

我的問題是,我需要檢測時,新條目已被添加到遠程曲目列表,因爲他們知道:

  • 我不知道多久遠程頁面將被更新
  • 我不不知道遠程頁面上顯示了多少曲目。有時它會是一條單曲,有時候會是幾十條。
  • 同一曲目可能會出現好幾次。

例如,抓住頁面,第一次時,我會得到這樣的數據:

  1. 死組合 - 愛喜Olhar闕兒阿SóTEU
  2. 邁倫&Ë - 如果我給你我的愛
  3. 胡佛菲尼克 - Badaboum
  4. 阿蘭尚福爾 - BAMBOU - Pilooski/Jayvich重奏
  5. 威廉·奧尼伯 - 原子彈
  6. 柯蒂斯梅菲爾德 - 移動上了 - 擴展版
  7. 莫斯戴夫 - 脂肪藏寶女士
  8. 本站Minaj - 感覺我自己
  9. 披露 - 你&我(水槽混音)
  10. 奧蒂斯雷丁 - 我的女孩 - 修復單

然後在第二次我會得到:

  1. 查爾斯阿森納沃爾 - Emmenez MOI
  2. 莫斯戴夫 - 脂肪藏寶女士
  3. Rag'n'Bone人 - 人
  4. 伯納德·拉維利爾斯 - IDEES noires
  5. 朱利安克萊爾 - 馬偏好
  6. 滾石樂隊 - 只是你的傻瓜
  7. Dead Combo - Esse Olhar Que EraSóTeu
  8. 邁倫&Ë - 如果我給你我的愛
  9. 胡佛菲尼克 - Badaboum
  10. 阿蘭尚福爾 - BAMBOU - Pilooski/Jayvich重奏

正如你所看到的,第二次,我得到了條目7 - > 10似乎與第一次相同(所以參賽作品1-> 6是新作品);第2首曲目已經在第一個列表中播放過了,但似乎已經重播了。

這裏的新條目將是:

  1. 查爾斯阿森納沃爾 - 帶我
  2. 莫斯戴夫 - 脂肪藏寶女士
  3. Rag'n'Bone人 - 人
  4. Lavilliers - 思想黑
  5. 朱利安克萊爾 - 我的選擇
  6. 滾石樂隊 - 只需喲烏爾傻瓜

我存儲在表中的軌道入口,並在另一個軌道的歷史。表

結構跟蹤表的

| ID | artist |  title  |  album  | 
-------------------------------------------------- 
| 12 | Mos Def | Ms. Fat Booty |    | 

結構跟蹤歷史

| ID | track ID |  time   | 
------------------------------------------ 
| 24 |  12  | 2016-07-03 13:40:26 | 

你有我能怎麼我們處理任何想法?

謝謝!

+0

@Veve:我不明白這一點...什麼ü意味着什麼呢? – gordie

回答

0

我覺得你試圖想找到第二個名單是那些在比賽的第一個開始的結束的項目?

如果你能盲目陣列中的兩個列表(舊列表中$previous$current新的列表),這個功能不宜幫助:

function find_old_tracks($previous, $current) 
{ 
    for ($i = 0; $i < count($current); $i++) 
    { 
     if ($previous[$i] == $current[$i]) continue; 
     return find_old_tracks($previous, array_slice($current, $i + 1)); 
    } 
    return array_slice($previous, 0, $i); 
} 

它掃描的連續比賽通過$current$previous,遞歸其餘的每次發現一個錯配。當我運行此:

$previous = array(
    'Dead Combo — Esse Olhar Que Era Só Teu', 
    'Myron & E — If I Gave You My Love', 
    'Hooverphonic — Badaboum', 
    'Alain Chamfort — Bambou - Pilooski/Jayvich Reprise', 
    'William Onyeabor — Atomic Bomb', 
    'Curtis Mayfield — Move on up - Extended version', 
    'Mos Def — Ms. Fat Booty', 
    'Nicki Minaj — Feeling Myself', 
    'Disclosure — You & Me (Flume remix)', 
    'Otis Redding — My Girl - Remastered Mono' 
); 

$current = array(
    'Charles Aznavour — Emmenez moi', 
    'Mos Def — Ms. Fat Booty', 
    'Rag Bone Man — Human', 
    'Bernard Lavilliers — Idées noires', 
    'Julien Clerc — Ma préférence', 
    'The Rolling Stones — Just Your Fool', 
    'Dead Combo — Esse Olhar Que Era Só Teu', 
    'Myron & E — If I Gave You My Love', 
    'Hooverphonic — Badaboum', 
    'Alain Chamfort — Bambou - Pilooski/Jayvich Reprise' 
); 

$old_tracks = find_old_tracks($previous, $current); 
$new_tracks = array_slice($current, 0, count($current) - count($old_tracks)); 

print "NEW TRACKS: " . implode($new_tracks, '; '); 
print "<br /><br />OLD TRACKS: " . implode($old_tracks, '; '); 

我的輸出是:

新的軌道:查爾斯阿森納沃爾 - 帶我; Mos Def - Fat Booty女士; 抹布骨人 - 人; Bernard Lavilliers - 黑色想法;朱利安克萊爾 - 我的偏好;滾石樂隊 - 只是你的傻瓜

舊跡:死組合 - 愛喜Olhar什麼時代如此TEU;邁倫&ë - 如果我給你我的愛; Hooverphonic - Badaboum;阿蘭尚福爾 - 竹 - Pilooski /重奏Jayvich

你可以做你喜歡什麼隨着數據庫結束該信息。

+0

謝謝您的回答;目標是什麼我尋找而是一種邏輯方法(如果有的話)來找到*當新的項目開始。這意味着集羣,第二陣列中,如果軌道過氣已經打過,它會* *露了出來。也許這是不可能的......請重新閱讀我的第一篇文章。 – gordie

+0

,我認爲這確實你說的話。只要函數遇到$ previous中不存在的條目,或者該條目的順序與$ before不同,它就會遞歸地調用自身的剩餘部分$ current。因此,返回的值不會包含尚未播放的曲目。但也許我誤解了你。 如果我說得對,那麼要找到新條目開始處的索引位置,您可以使用 count($ current) - count($ old_tracks)或類似的東西。 – craigmc