10/10/2018, 09:49
PHP - Lấy thông tin từ web khác
Quyết có 1 phương pháp dễ dàng để đọc dữ liệu và bóc tách text html từ trang web khác với link đưa về là 1 chuỗi ID.
Ví dụ ta có link của trang web có định dạng như sau:
http://www.tenmien.com/media/player/...bed.php?vkey=1
Chú ý: Các bạn có thể dùng thử với trang này:
http://www.youhot.com/media/player/c...bed.php?vkey=1
- Nội dung của nó không được hay lắm nhưng đó là 1 ví dụ thực tế để kiểm tra kết quả.
- Trong file tôi đưa lên là đã hoàn thành và bạn có thể test thử, hiện giờ tôi không thể upload được file .rar lên đây, không biết tại sao.
1. Tôi tạo 2 thư mục images và file.
2. Tôi tạo database để lưu trữ dữ liệu là link phim và ảnh để dùng sau này: tenmien_db
3. Xem nội dung html trang web trả về, link tôi dùng ở đây trả về nội dung của 1 file xml.
- Ta cần lấy http://www.tenmien.com/media/videos/tmb/1/default.jpg là link của ảnh số 1
- Link của video số 1: http://www.tenmien.com:81/flv/f761ab...4ac1b7f8/1.flv
4. Bắt đầu code trang lấy dữ liệu:
Ví dụ ta có link của trang web có định dạng như sau:
http://www.tenmien.com/media/player/...bed.php?vkey=1
Chú ý: Các bạn có thể dùng thử với trang này:
http://www.youhot.com/media/player/c...bed.php?vkey=1
- Nội dung của nó không được hay lắm nhưng đó là 1 ví dụ thực tế để kiểm tra kết quả.
- Trong file tôi đưa lên là đã hoàn thành và bạn có thể test thử, hiện giờ tôi không thể upload được file .rar lên đây, không biết tại sao.
1. Tôi tạo 2 thư mục images và file.
2. Tôi tạo database để lưu trữ dữ liệu là link phim và ảnh để dùng sau này: tenmien_db
Code:
SET FOREIGN_KEY_CHECKS=0; DROP DATABASE IF EXISTS `tenmien_db`; CREATE DATABASE `tenmien_db` CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci'; USE `tenmien_db`; CREATE TABLE `tbllink` ( `IDLink` int(255) NOT NULL AUTO_INCREMENT, `txtLinkImages` text, `txtLinkFile` text, PRIMARY KEY (`IDLink`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Code:
<xml> <logo> <image>http://www.tenmien.com/media/player/logo/logo.png</image> <position>TR</position> <link>www.tenmien.com</link> <alpha>70</alpha> </logo> <video> <autorun>false</autorun> <image>http://www.tenmien.com/media/videos/tmb/1/default.jpg</image> <bufferTime>3</bufferTime> <server>lighttpd</server> <src>http://www.tenmien.com:81/flv/f761abc54ddf5b92835e4c45a9779f70/4ac1b7f8/1.flv</src> <related>http://www.tenmien.com/media/player/related.php?mode=related&video_id=1</related> </video> <mediaAdv> <src></src> <mode>none</mode> <duration></duration> <link></link> </mediaAdv> <textAdv enable="true"> <src>http://www.tenmien.com/media/player/ads.php</src> <delay>5</delay> </textAdv> <share>http://www.tenmien.com/video/1/kenzi-marie-sucking-and-fucking</share> <embed><![CDATA[<embed width="452" height="361" quality="high" wmode="transparent" name="main" id="main" allowfullscreen="true" allowscriptaccess="always" src="http://www.tenmien.com/media/player/player.swf?f=http://www.tenmien.com/player/config.php?vkey=1" type="application/x-shockwave-flash" />]]></embed> <skin>http://www.tenmien.com/media/player/skin.php?t=default&b=1&r=1&e=1&s=1&m=1&p=1&mc=0x999999&rc=0x999999&ec=0x999999&rec=0x999999&cc=0xf1f1f1&tc=0x999999&sc=0x999999&anc=0x999999&atc=0xffa200&abc=0xf1f1f1&alc=0x999999&video=1</skin> </xml>
- Link của video số 1: http://www.tenmien.com:81/flv/f761ab...4ac1b7f8/1.flv
4. Bắt đầu code trang lấy dữ liệu:
PHP Code:
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
<head>
<title> :::: </title>
</head>
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<table border="0" cellpadding="5" cellspacing="0" align="center">
<?php
$txtHost = ""; // Ten host
$txtDbName = ""; // Ten database
$txtUserName = ""; // Ten dang nhap db
$txtPassword = ""; // Mat khau dang nhap db
if (mysql_pconnect($txtHost,$txtUserName, $txtPassword))
{
// Ket noi database
if (!mysql_select_db($txtDbName))
exit("Ko kết nối được<br>");
}
else
exit("Ko kết nối được<br>");
function insertLinkImagesFile($txtLinkImages,$txtLinkFile)
{
// Insert vào bảng tbllink với link ảnh và link video
$sql = "INSERT INTO tbllink(txtLinkImages,txtLinkFile) VALUES('".$txtLinkImages."', '".$txtLinkFile."')";
// Thực thi câu lệnh sql
$query = mysql_query($sql);
if($query)
{
// Nếu query thực thi câu sql chưa được giải phóng từ bộ nhớ của server thì giải phóng.
if(is_resource($query))
mysql_free_result($query);
return 1;
}
}
// Đường dẫn đến file text lưu trữ link
$txtLinkFile = "file/link.txt";
// Đường dẫn đến link trang web cần lấy dữ liệu với parametter để trống, giá trị sau cái parametter vkey sẽ được gán vào trong từng vòng lặp for
$txtLinkWeb = "http://www.tenmien.com/media/player/config_embed.php?vkey=";
// Số là ID bắt đầu lấy
$intSoLinkForStart = 1;
// ID kết thúc cũng là số lần for
$intSoLinkForEnd = 400;
for($iiLink = $intSoLinkForStart; $iiLink <= $intSoLinkForEnd; $iiLink++)
{
$txtNewContent = null;
$txtNewImages = null;
$txtLinkShow = null;
// Nếu là lần chạy đầu tiên thì ghi đè dữ liệu là null lên file $txtLinkFile
if($iiLink == 1)
{
$handle = fopen($txtLinkFile, "w");
fwrite($handle, null);
fclose($handle);
}
// Gán parametter
$url = $txtLinkWeb.$iiLink;
// Đọc toàn bộ nội dung html trang web trả về gán vào 1 biến
$txtContent = file_get_contents($url);
// Độ dài của nội dung được đọc về
$intLengContent = strlen($txtContent);
// Nếu như độ dài của nội dung trả về lớn hơn 30 thì mới tiếp tục xử lý, vì nếu nhỏ hơn 30 web đó trả về giá trị Invalid video key! ít hơn 30 ký tự.
if($intLengContent > 30)
{
// Đằng trước của link http://www.tenmien.com/media/videos/tmb/1/default.jpg có 1 thẻ <image> nên ta sẽ dựa vào thẻ này để tìm vị trí chuỗi ta cần lấy nhưng bên trên nó lại có 1 thẻ <image> khác nên ta xác định vị trí của thẻ </autorun> chỉ xuất hiện có 1 lần nên việc tìm kiếm chắc chắn sẽ chính xác
$intVtriAutoRunDong = strpos($txtContent,"</autorun>");
// Ta lấy vị trí của thẻ <image> bắt đầu từ vị trí của thẻ </autorun>, ta + thêm 7 ký tự vì độ dài của thẻ <image> là 7
$intVtriMoImage = strpos($txtContent,"<image>",$intVtriAutoRunDong) + 7;
// Ta tiếp tục lấy được nội dung link ảnh từ vị trí của thẻ <image> trở về sau
$txtContentImages = substr($txtContent,$intVtriMoImage);
// Ta tìm vị trí </image> trong chuỗi vừa lấy được lúc này không còn thẻ <image> nữa
$intVtriImagesDong = strpos($txtContentImages,"</image>");
// Như vậy ta lấy được chuỗi bắt đầu từ hết thẻ <image> lúc này là vị trí 0 đến vị trí của thẻ </image>
$txtNewImages = substr($txtContentImages,0,$intVtriImagesDong);
// Tìm vị trí bắt đầu link ta cần với giá trị + 5 là + thêm độ dài của chuỗi <src>
$intVtriSrcMo = strpos($txtContent,"<src>") + 5;
// Lấy dữ liệu bắt đầu từ vị trí <src> đến hết
$txtContent2 = substr($txtContent,$intVtriSrcMo);
// Lấy vị trí thẻ </src>
$intVtriSrcDong = strpos($txtContent2,"</src>");
// Như vậy ta lấy được chuỗi bắt đầu từ hết thẻ <src> lúc này là vị trí 0 đến vị trí của thẻ </src>
$txtNewContent = substr($txtContent2,0,$intVtriSrcDong);
// Gọi function add link ảnh và link phim lên database
insertLinkImagesFile($txtNewImages,$txtNewContent);
// Gán giá trị của thư mục chứa bức ảnh trong thư mục images ta tạo lúc trước là ID hiện tại đang thực thi
$linkTest = "images/".$iiLink;
// Đưa ra đường dẫn của bức ảnh sau khi lấy dữ liệu về hiển thị lên trang
$txtLinkShow = $linkTest."/default.jpg";
// Nếu cái link ví dụ images/1 không tồn tại thì xử lý tiếp bên trong
if(is_dir($linkTest) != 1)
{
// Tạo thư mục images/1
mkdir($linkTest);
// Dùng lệnh copy để copy ảnh từ link lấy được vào thư mục images/1 tất nhiên với tên default.jpg
copy($txtNewImages, $txtLinkShow);
}
// Đọc toàn bộ dữ liệu của file đã được gán lúc trước là file/link.txt
$txtNewHandle = file_get_contents($txtLinkFile);
// Nếu không phải lần chạy đầu tiên thì dữ liệu sẽ tồn tại, tiếp tục vào trong
if($txtNewHandle != null)
// Nối chuỗi đoạn text của link mới vào đoạn text vừa đọc được trong file
$txtNewHandle .= "
".$txtNewContent;
else
// Gán đoạn text của link mới đè lên dữ liệu null của file
$txtNewHandle = $txtNewContent;
// Mở file và lưu dữ liệu vừa ghép được vào lại file cũ
$handle = fopen($txtLinkFile, "w");
fwrite($handle, $txtNewHandle);
fclose($handle);
?>
<tr>
<td style="text-align: center;">
<!-- Show bức ảnh với link ảnh lấy được trong lần lặp này ->
<img src="<?php echo $txtLinkShow; ?>" alt="" />
</td>
<td style="text-align: left;">
<!-- Show nội dung với link lấy được trong lần lặp này ->
<?php echo $txtNewContent; ?>
</td>
</tr>
<?php
}
}
?>
</table>
</body>
</html>
Bài liên quan
với trên thì chẳng cần phức tạp vậy
chỉ cần