Php 网络抓取:如何检测列表中的新项目?
我正在编写一些PHP代码,可以从远程广播页面获取音乐播放列表,这意味着它会不断更新。 我想将曲目历史记录存储在我的数据库中 我的问题是,我需要检测何时将新条目添加到远程跟踪列表,知道:Php 网络抓取:如何检测列表中的新项目?,php,web-scraping,Php,Web Scraping,我正在编写一些PHP代码,可以从远程广播页面获取音乐播放列表,这意味着它会不断更新。 我想将曲目历史记录存储在我的数据库中 我的问题是,我需要检测何时将新条目添加到远程跟踪列表,知道: 我不知道远程页面的更新频率 我不知道远程页面上显示了多少曲目。有时是单轨,有时是几十轨 同一曲目可能会出现多次 例如,我将在第一次抓取页面时获得以下数据: 死亡组合-埃塞·奥尔哈克时代索特 如果我给了你我的爱 胡佛音-巴达博姆 阿兰·钱福特-班布-皮洛斯基/杰维奇再版 威廉·奥尼亚博-原子弹 柯蒂斯·梅菲尔德
- 我不知道远程页面的更新频率
- 我不知道远程页面上显示了多少曲目。有时是单轨,有时是几十轨
- 同一曲目可能会出现多次
| ID | artist | title | album |
--------------------------------------------------
| 12 | Mos Def | Ms. Fat Booty | |
| ID | track ID | time |
------------------------------------------
| 24 | 12 | 2016-07-03 13:40:26 |
轨道历史记录表的结构
| ID | artist | title | album |
--------------------------------------------------
| 12 | Mos Def | Ms. Fat Booty | |
| ID | track ID | time |
------------------------------------------
| 24 | 12 | 2016-07-03 13:40:26 |
你对我如何处理这件事有什么想法吗
谢谢 我想您是想在第二个列表的末尾找到与第一个列表开头匹配的项目 如果可以将两个列表存储在一个数组中(旧列表在
$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);
}
我的输出是:
新曲目:查尔斯·阿兹纳沃-埃蒙内斯·莫伊;Mos Def-胖战利品女士;
碎骨人-人;伯纳德·拉维利尔斯-黑衣主教;朱利安克雷
-法国总理;滚石乐队-只是你的傻瓜
老曲目:死亡组合-埃塞·奥尔哈克时代索特;Myron&E-如果我
给了你我的爱;胡佛音-巴达博姆;阿兰·钱福特-班布-
皮洛斯基/杰维奇重演
你可以用数据库端的信息做你想做的事。@Veve:我不明白。。。你是什么意思?谢谢你的回答;但我搜索的是一种逻辑方法(如果有)来查找新条目的起始位置。这意味着在第二个数组中,如果已经播放了曲目,它也可能出现。也许那是不可能的。。。请重新阅读我的第一篇文章。我想这就是你所说的。一旦函数遇到$previous中不存在的条目,或者与$previous中的条目顺序不同,它就会使用$current的剩余部分递归调用自己。因此,返回值不可能包含尚未播放的曲目。但也许我误解了你。如果我是对的,那么要找到新条目开始的索引位置,可以使用count($current)-count($old_tracks)或类似的方法。