作者hellolucky (做自己 好自在)
看板PHP
標題Re: [請益] 思路請益 (關於正規表示,curl)
時間Wed Feb 24 11:25:28 2010
※ 引述《kusoayan (Maybe)》之銘言:
: 大家好
: 目前正在寫一隻小程式
: 功能是抓取無名網誌上播放器的音樂載點
: 而通常無名上是用iframe嵌入播放器
: http://tinyurl.com/ygsvmh2
: 其中 <iframe src=" 後的那段網址裡頭是真正要處理的code
: 目前程式的流程是:
: 用curl先抓取所給的url的html
: 然後分析此html , 用preg_match 函式抓出 <iframe src=" 後的那段網址
: 而我用的正規表示式是 /iframe src=\"(.+?)\" frameborde/
: 再把這個網址用curl抓出原始碼
: 此時的code大約類似
: http://tinyurl.com/yk99ttk
: 然後再用 /\?file=(.+?)&/ 把 file= 後面的這段抓下來
: 這個就是我所要的網址
: 以上用於我自己的無名都OK
: 但是我用朋友得來測試時卻發現幾點致命傷
: 1.我的無名只有一個iframe
: 可是不見得別人的也只有一個
: 也許有很多個
: 那這個時候該怎麼去抓播放器的語法呢 ? 該怎麼設定正規表示式的條件 ?
: 或是有iframe的地方都抓出來
: 反正到第二步驟的時候"應該"只有播放器的那個iframe會有結果
: (算偷懶嗎XD)
用preg_match_all
http://tw2.php.net/manual/en/function.preg-match-all.php
preg_match_all("/\?file=(.*)&/",$content,$url);
for($i=0; $i<count($url[1]); $i++){
echo $url[1][$i]; //去處理抓到的網址
}
至於為什麼是抓$url[1]裡面的東西
不是$url[0]的東西
可以參考文件try try看
: 2.抓取到播放器的code後
: 因為file,autostart等等是參數可以隨意變換位置
: 我的是file再最前面,所以連接下一個參數會用&
: 以此作為正規表示式的規則
: 可是像我朋友的就很機車 file再最後面
: 所以載點之後並沒有 &
: 這個時候規則又該怎麼改 ?
如果抓 /\?file=(.*)&/
count(count($url[1]))為0
則再抓 /&file=(.*)/ 依此類推
: 以上
: 因為我對正規表示式並沒有真正學習過
: 都是看著別人的code + google依樣畫葫蘆
: 所以現在遇到這個問題思路有點轉不出去
: 希望有高手能幫忙指點一下
: 謝謝 :D
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.21.158.139
推 kusoayan:所以preg_match是抓了一個後就停止嗎 ? 02/24 22:25
推 kusoayan:又 如果player中有兩首歌 即有兩個file 02/24 22:36
→ kusoayan:aaa=1&bbb=2&file=xxxx " ....file=xxxx& 02/24 22:36
→ kusoayan:那這樣他會從第一個file的開頭抓到第二個file的結尾嗎 ? 02/24 22:37
→ hellolucky:如果第二個file也是&開頭 就會 02/25 01:21
推 kusoayan:所以 /\?file=(.*)&/ 這種寫法有缺陷囉 ? 02/25 19:46
推 buganini:.*? 02/25 21:35
→ hellolucky:這可能要你自己分析一下 因為我沒去特別研究 02/25 23:17
→ hellolucky:像你第三行說的那種 用/&file=(.*)/ 也會有缺陷 02/25 23:18