Sekalian aja saya coba share dan mendiskusikannya dengan kumendan, moga ada master wap yang mau ikutan dan mau mengajari hamba. :you:
Kelebihan dari 4shared API ini adalah karena akses dan fetch list file nya yg jauh lebih ringan, lebih cepat dan tentunya lebih hemat bandwith/resource server kita karena kita tidak lagi banyak menggunakan regexp untuk memotong/cut content yg tidak kita butuhkan. Dan tentunya lebih simple menggunakannya
Baiklah cukup basa-basinya, sekarang kita mulai yuuuuuk.... (siapkan secangkir kopi panas)
Oke, pertama kali kita buat dulu class fungsi untuk membuat array dari XML Format yg didapatkan:
<?php
function xmltoarray($contents, $get_attributes=1) {
if(!$contents) return array();
if(!function_exists('xml_parser_create')) {
return array();
}
$parser = xml_parser_create();
xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, 0 );
xml_parser_set_option( $parser, XML_OPTION_SKIP_WHITE, 1 );
xml_parse_into_struct( $parser, $contents, $xml_values );
xml_parser_free( $parser );
if(!$xml_values) return;
$xml_array = array();
$parents = array();
$opened_tags = array();
$arr = array();
$current = &$xml_array;
foreach($xml_values as $data) {
unset($attributes,$value);
extract($data);
$result = '';
if($get_attributes) {
$result = array();
if(isset($value)) $result['value'] = $value;
if(isset($attributes)) {
foreach($attributes as $attr => $val) {
if($get_attributes == 1) $result['attr'][$attr] = $val;
}
}
} elseif(isset($value)) {
$result = $value;
}
if($type == "open") {
$parent[$level-1] = &$current;
if(!is_array($current) or (!in_array($tag, array_keys($current)))) {
$current[$tag] = $result;
$current = &$current[$tag];
} else {
if(isset($current[$tag][0])) {
array_push($current[$tag], $result);
} else {
$current[$tag] = array($current[$tag],$result);
}
$last = count($current[$tag]) - 1;
$current = &$current[$tag][$last];
}
} elseif($type == "complete") {
if(!isset($current[$tag])) {
$current[$tag] = $result;
} else {
if((is_array($current[$tag]) and $get_attributes == 0)
or (isset($current[$tag][0]) and is_array($current[$tag][0]) and $get_attributes == 1)) {
array_push($current[$tag],$result);
} else {
$current[$tag] = array($current[$tag],$result);
}
}
} elseif($type == 'close') {
$current = &$parent[$level-1];
}
}
return($xml_array);
}
?>[/php]
Fungsi diatas adalah fungsi xmltoarray() (untuk pecl sebenarnya xml2array) yang merupakan pecl dari PHP, merupakan plugin fungsi tambahan dan bukan bawaan PHP default, sehingga kalau PHP nya belum enable maka fungsi xml2array harus dibuat manual seperti diatas yg diberi nama fungsi xmltoarray().
Nah dengan adanya fungsi diatas maka kita bisa membuat hasil results pencarian file MP3 dari 4shared API Server dalam bentuk array, sehingga kita dapat lebih leluasa meletakkan dan mem print-out hasil yg didapatkan sesuai dengan format halaman yang kita buat.
Adapun server API dari 4shared yang digunakan adalah:
http://search.4shared.com/network/searchXml.jsp?q=KATA_KUNCI&searchExtention=mp3&sortType=1&sortOrder=1&searchmode=3&start=START
Perhatikan 2 kata yg saya beri warna merah, yaitu:
- KATA_KUNCI
Kata kunci disini merupakan keywords yang dipakai saat kita melakukan pencarian file dari 4shared, merupakan string dan untuk lebih amannya saran saya menggunakan urlencode(). - START
START yang disini dimaksudkan untuk penomoran file untuk lists file yg didapatkan (Maksudnya adalah file dalam halaman).
Lebih simple nya, start disini dimaksudkan untuk halaman-halaman pada lists file yg didapatkan.
Jadi dengan ke-dua parameter diatas, kita hanya butuh 2 variable pada web/wap kita yg dinamis untuk penggunaan Kata_kunci dan halaman.
Misalnya saya buat 2 variable itu adalah:
1. $katakunci = merupakan variabel kata kunci yang dipergunakan
2. $page = merupakan variabel halaman yg dipergunakan
Jadi kita dapay membuat contoh sebagai berikut:
[php]<?php
$katakunci = isset($_GET['katakunci']) ? $_GET['katakunci'] : '';
$page = isset($_GET['page']) ? $_GET['page'] : 0;
?>[/php]
Untuk filter (menghindari hack/xss pada wap/web kita):
[php]<?php
if ( (is_array($katakunci) === true) || (is_array($page) === true) ) {
die('Ada array string pada kata kunci atau page yg dipakai.');
}
$katakunci = urlencode($katakunci);
$page = intval($page);
?>
Sekarang, tinggal kita buat contoh form pencariannya:
[php]
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<div class="postreply">
<input type="text" name="katakunci" value="" />
<input type="submit" name="search" value="Search" />
</div>
</form>[/php]
Dengan form diatas, kita bisa mendapatkan variabel field katakunci yaitu pada <input type="text" name="katakunci" value="" /> dan variabel field tambahan search yaitu pada <input type="submit" name="search" value="Search" /> dimana field search ini sengaja saya tambahkan untuk aksi yang dilakukan.
Jadi bisa kita buat misalnya:
[php]<?php
if (isset($_POST['search'])) {
$keywords = isset($_POST['katakunci']) ? $_POST['katakunci'] : '';
if (empty($keywords) || $keywords == '') { die('Kata kunci nya kosong kumendan.'); }
$keywords = urlencode($keywords);
header('Location: '.$_SERVER['PHP_SELF'].'?katakunci='.$keywords);
exit;
}
?>[/php]
Kenapa muncul variable $keywords diatas? Itu adalah penerjemah dari field katakunci yang kita isi, karena $katakunci kita terjemahkan sebelumnya adalah superglobal $_GET, padahal asi yang kita lakukan adalah global $_POST.
Sebenarnya untuk menggabungkan kedua aksi ini supaya lebih sedikit variable, kita bisa menggunakan global $_REQUEST tetapi saran saya lebih ke $_GET dan $_POST aja karena selain metode get dan post, $_REQUEST juga didalamnya termasuk $_COOKIE dan $_SESSION (CMIIW).
Nah dengan aksi POST dan API Server serta fungsi xmltoarray() yang kita buat, kita bisa melakukan fetch data dari server API 4shared dengan menggunakan file_get_contents(), seperti berikut:
[php]<?php
if ($katakunci) {
$url = 'http://search.4shared.com/network/searchXml.jsp?q='.$katakunci.'&searchExtention=mp3&sortType=1&sortOrder=1&searchmode=3';
if ($page) { $url .= '&start='.($page * 10); }
$result = @file_get_contents($url);
if ($result == false) {
die('Error fetch content.');
}
else {
$results = xmltoarray($result);
if (intval($results['search-result']['total-files']['value']) > 1) {
foreach ($results['search-result']['result-files']['file'] as $resultfiles) {
?>
<div style="border-bottom:1px solid #898989;">
<div style="color:red;border-bottom:1px solid #363636;"><?=$resultfiles['name']['value']?></div>
<a href="<?=$resultfiles['flash-preview-url']['value']?>">Download Preview</a>
</div>
<?php
}
} else {
?>
<div style="border-bottom:1px solid #898989;">
<div style="color:red;border-bottom:1px solid #363636;"><?=$results['search-result']['result-files']['file']['name']['value']?></div>
<a href="<?=$results['search-result']['result-files']['file']['flash-preview-url']['value']?>">Download Preview</a>
</div>
<?php
}
}
?>
<div style="border-top:1px solid #ff7200;">
Paging<br/>
<?php
if ($page > 1) { echo ' <a href="'.$_SERVER['PHP_SELF'].'?katakunci='.$katakunci.'&page='.($page - 1).'">Prev</a> '; }
echo ' <a href="'.$_SERVER['PHP_SELF'].'?katakunci='.$katakunci.'&page='.($page + 1).'">Next</a> ';
?>
</div>
<?php
}
?>[/php]
Jika ingin mendapatkan results yang lebih lengkap silahkan kumendan print out hasil results nya dalam bentuk array dan silahkan dimodifikasi untuk mem print-out array yang dibutuhkan:
[php]<?php
echo '<pre>';
print_r($results);
echo '</pre>';
?>[/php]
Semoga bermanfaat ya
Posting Komentar
Saya coba dulu ya gan..
Minta yang paling terkini / terupdate dong..
wah jadi bingung sob!