319 lines
12 KiB
PHP
319 lines
12 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Http;
|
|
use App\Models\Master\Provinsi;
|
|
use App\Models\Master\Kabupaten;
|
|
use App\Models\Master\Kecamatan;
|
|
use App\Models\Master\Sekolah;
|
|
use App\Models\Master\MasterTingkatSekolah;
|
|
use GuzzleHttp\Client;
|
|
use Symfony\Component\DomCrawler\Crawler;
|
|
|
|
|
|
class ApiController extends Controller
|
|
{
|
|
public function getProvince()
|
|
{
|
|
$curl = curl_init();
|
|
curl_setopt_array($curl, array(
|
|
CURLOPT_URL => 'https://dapo.dikdasmen.go.id/rekap/dataSekolah?id_level_wilayah=0&kode_wilayah=000000&semester_id=20242',
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_ENCODING => '',
|
|
CURLOPT_MAXREDIRS => 10,
|
|
CURLOPT_TIMEOUT => 0,
|
|
CURLOPT_FOLLOWLOCATION => true,
|
|
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
|
CURLOPT_CUSTOMREQUEST => 'GET',
|
|
));
|
|
|
|
$response = curl_exec($curl);
|
|
|
|
curl_close($curl);
|
|
|
|
$data = json_decode($response);
|
|
$_data = [];
|
|
foreach($data as $k => $val){
|
|
$_data = Provinsi::updateOrCreate([
|
|
'kode_wilayah' => str_replace(' ', '', $val->kode_wilayah)
|
|
],[
|
|
'name' => str_replace('Prov. ','',$val->nama),
|
|
'kode_wilayah' => str_replace(' ', '', $val->kode_wilayah),
|
|
]);
|
|
}
|
|
|
|
echo "-- DONE --";
|
|
|
|
}
|
|
|
|
public function getKabupaten()
|
|
{
|
|
$prov = Provinsi::where('kode_wilayah','010000')->first();
|
|
$curl = curl_init();
|
|
curl_setopt_array($curl, array(
|
|
CURLOPT_URL => 'https://dapo.dikdasmen.go.id/rekap/dataSekolah?id_level_wilayah=1&kode_wilayah=010000&semester_id=20242',
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_ENCODING => '',
|
|
CURLOPT_MAXREDIRS => 10,
|
|
CURLOPT_TIMEOUT => 0,
|
|
CURLOPT_FOLLOWLOCATION => true,
|
|
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
|
CURLOPT_CUSTOMREQUEST => 'GET',
|
|
));
|
|
|
|
$response = curl_exec($curl);
|
|
|
|
curl_close($curl);
|
|
$data = json_decode($response);
|
|
$_data = [];
|
|
|
|
|
|
foreach($data as $k => $val){
|
|
$_data = Kabupaten::updateOrCreate([
|
|
'kode_wilayah' => str_replace(' ', '', $val->kode_wilayah),
|
|
],[
|
|
'ms_provinsi_id' => $prov->MsProvinsiId,
|
|
'name' => str_replace('Kab. ','',$val->nama),
|
|
'kode_wilayah' => str_replace(' ', '', $val->kode_wilayah),
|
|
]);
|
|
}
|
|
|
|
echo "-- DONE --";
|
|
|
|
}
|
|
|
|
public function getKecamatan()
|
|
{
|
|
//get kabupaten jakarta
|
|
$prov = Provinsi::where('kode_wilayah','010000')->first();
|
|
$kab = Kabupaten::where('ms_provinsi_id',$prov->MsProvinsiId)->get();
|
|
foreach($kab as $data){
|
|
$response = Http::timeout(300)->withoutVerifying()->get('https://dapo.dikdasmen.go.id/rekap/dataSekolah?id_level_wilayah=2&kode_wilayah='.$data->kode_wilayah.'&semester_id=20242');
|
|
|
|
$kec = json_decode($response->body());
|
|
foreach($kec as $val){
|
|
$_data = Kecamatan::updateOrCreate([
|
|
'kode_wilayah' => str_replace(' ', '', $val->kode_wilayah),
|
|
],[
|
|
'ms_provinsi_id' => $prov->MsProvinsiId,
|
|
'ms_kabupaten_id' => $data->MsKabupatenId,
|
|
'name' => str_replace('Kec. ','',$val->nama),
|
|
'kode_wilayah' => str_replace(' ', '', $val->kode_wilayah),
|
|
]);
|
|
}
|
|
}
|
|
|
|
echo "-- DONE --";
|
|
}
|
|
|
|
public function getSekolah()
|
|
{
|
|
|
|
$type = request()->type;
|
|
|
|
$level = MasterTingkatSekolah::where('name',strtoupper($type))->first();
|
|
//get kabupaten jakarta
|
|
$prov = Provinsi::where('kode_wilayah','010000')->first();
|
|
$kab = Kabupaten::where('ms_provinsi_id',$prov->MsProvinsiId)->get();
|
|
foreach($kab as $data){
|
|
$kec = Kecamatan::where('ms_kabupaten_id',$data->MsKabupatenId)->get();
|
|
|
|
foreach($kec as $dataKec){
|
|
$response = Http::timeout(300)->withoutVerifying()->get('https://dapo.dikdasmen.go.id/rekap/progresSP?id_level_wilayah=3&kode_wilayah='.$dataKec->kode_wilayah.'&semester_id=20242&bentuk_pendidikan_id='.$type);
|
|
|
|
$dataSekolah = json_decode($response->body());
|
|
|
|
foreach($dataSekolah as $val){
|
|
$_data = Sekolah::updateOrCreate([
|
|
'npsn' => $val->npsn,
|
|
],[
|
|
'ms_provinsi_id' => $prov->MsProvinsiId,
|
|
'ms_kabupaten_id' => $data->MsKabupatenId,
|
|
'ms_kecamatan_id' => $dataKec->MsKecamatanId,
|
|
'ms_tingkat_sekolah_id' => $level->MsTingkatSekolahId,
|
|
'status' => $val->status_sekolah,
|
|
'nama_sekolah' => $val->nama,
|
|
'npsn' => $val->npsn,
|
|
]);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
echo "-- DONE --";
|
|
}
|
|
|
|
public function scrappingMI(Request $request)
|
|
{
|
|
$prov = Provinsi::where('kode_wilayah','010000')->first();
|
|
$kab = Kabupaten::where('ms_provinsi_id',$prov->MsProvinsiId)->get();
|
|
$jenjang = $request->input('jenjang', '3'); // SD = 3
|
|
$jenis = $request->input('jenis', 'jf'); // jenjang formal
|
|
//9 = MI, 10 = Mts
|
|
$status = $request->input('status'); // semua status
|
|
$level = $request->input('level', 'all'); // semua level
|
|
$dataScrapping = [];
|
|
|
|
foreach($kab as $data){
|
|
$kec = Kecamatan::where('ms_kabupaten_id',$data->MsKabupatenId)->get();
|
|
foreach($kec as $dataKec){
|
|
|
|
$provinsi = $request->input('provinsi', $dataKec->kode_wilayah); // default Kep. Seribu Selatan
|
|
|
|
|
|
$url = "https://referensi.data.kemdikbud.go.id/pendidikan/dikdas/{$provinsi}/{$jenjang}/{$jenis}/{$status}/{$level}";
|
|
|
|
$response = Http::timeout(300)->withoutVerifying()->get($url);
|
|
// $client = new Client();
|
|
// $res = $client->get($url);
|
|
$html = $response->body();
|
|
|
|
$crawler = new Crawler($html);
|
|
$table = $crawler->filter('table')->first();
|
|
|
|
|
|
|
|
$headers = $table->filter('tr')->first()->filter('th')->each(function ($node) {
|
|
return trim($node->text());
|
|
});
|
|
|
|
$table->filter('tr')->each(function ($tr, $i) use (&$dataScrapping, $headers) {
|
|
if ($i === 0) return; // skip header row
|
|
$row = $tr->filter('td')->each(function ($td) {
|
|
return trim($td->text());
|
|
});
|
|
if (count($row) === count($headers)) {
|
|
$dataScrapping[] = array_combine($headers, $row);
|
|
}
|
|
});
|
|
// dd($dataScrapping);
|
|
if($status == 9){
|
|
$tingkat = 5;
|
|
}elseif($status == 10){
|
|
$tingkat = 6;
|
|
}
|
|
foreach($dataScrapping as $val){
|
|
$_data = Sekolah::updateOrCreate([
|
|
'npsn' => $val['NPSN'],
|
|
],[
|
|
'ms_provinsi_id' => $prov->MsProvinsiId,
|
|
'ms_kabupaten_id' => $data->MsKabupatenId,
|
|
'ms_kecamatan_id' => $dataKec->MsKecamatanId,
|
|
'ms_tingkat_sekolah_id' => $tingkat,
|
|
'status' => ucwords($val['Status']),
|
|
'nama_sekolah' => $val['Nama Satuan Pendidikan'],
|
|
'alamat_sekolah' => $val['Alamat'],
|
|
'npsn' => $val['NPSN'],
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Scraping selesai',
|
|
'jumlah_data' => count($dataScrapping),
|
|
'data' => $dataScrapping,
|
|
]);
|
|
}
|
|
|
|
public function scrappingMA(Request $request)
|
|
{
|
|
$prov = Provinsi::where('kode_wilayah','010000')->first();
|
|
$kab = Kabupaten::where('ms_provinsi_id',$prov->MsProvinsiId)->get();
|
|
$jenjang = $request->input('jenjang', '3'); // SD = 3
|
|
$jenis = $request->input('jenis', 'jf'); // jenjang formal
|
|
$status = $request->input('status', '16'); // semua status
|
|
$level = $request->input('level', 'all'); // semua level
|
|
$dataScrapping = [];
|
|
|
|
foreach($kab as $data){
|
|
$kec = Kecamatan::where('ms_kabupaten_id',$data->MsKabupatenId)->get();
|
|
foreach($kec as $dataKec){
|
|
|
|
$provinsi = $request->input('provinsi', $dataKec->kode_wilayah); // default Kep. Seribu Selatan
|
|
|
|
|
|
$url = "https://referensi.data.kemdikbud.go.id/pendidikan/dikmen/{$provinsi}/{$jenjang}/{$jenis}/{$status}/{$level}";
|
|
|
|
$response = Http::timeout(300)->withoutVerifying()->get($url);
|
|
// $client = new Client();
|
|
// $res = $client->get($url);
|
|
$html = $response->body();
|
|
|
|
$crawler = new Crawler($html);
|
|
$table = $crawler->filter('table')->first();
|
|
|
|
|
|
|
|
$headers = $table->filter('tr')->first()->filter('th')->each(function ($node) {
|
|
return trim($node->text());
|
|
});
|
|
|
|
$table->filter('tr')->each(function ($tr, $i) use (&$dataScrapping, $headers) {
|
|
if ($i === 0) return; // skip header row
|
|
$row = $tr->filter('td')->each(function ($td) {
|
|
return trim($td->text());
|
|
});
|
|
if (count($row) === count($headers)) {
|
|
$dataScrapping[] = array_combine($headers, $row);
|
|
}
|
|
});
|
|
// dd($dataScrapping);
|
|
foreach($dataScrapping as $val){
|
|
$_data = Sekolah::updateOrCreate([
|
|
'npsn' => $val['NPSN'],
|
|
],[
|
|
'ms_provinsi_id' => $prov->MsProvinsiId,
|
|
'ms_kabupaten_id' => $data->MsKabupatenId,
|
|
'ms_kecamatan_id' => $dataKec->MsKecamatanId,
|
|
'ms_tingkat_sekolah_id' => 7,
|
|
'status' => ucwords($val['Status']),
|
|
'nama_sekolah' => $val['Nama Satuan Pendidikan'],
|
|
'alamat_sekolah' => $val['Alamat'],
|
|
'npsn' => $val['NPSN'],
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Scraping selesai',
|
|
'jumlah_data' => count($dataScrapping),
|
|
'data' => $dataScrapping,
|
|
]);
|
|
}
|
|
|
|
public function testScrapping()
|
|
{
|
|
$client = new Client();
|
|
|
|
|
|
$url = "https://ww1.anoboy.app/2016/10/one-piece-indonesia";
|
|
|
|
$response = Http::timeout(300)->withoutVerifying()->get($url);
|
|
$html = $response->body();
|
|
|
|
$crawler = new Crawler($html);
|
|
$table = $crawler->filter('table')->first();
|
|
|
|
$episodes = [];
|
|
$crawler->filter('ul#lcp_instance_0 li a')->each(function ($node) use (&$episodes) {
|
|
$title = $node->text();
|
|
$url = $node->attr('href');
|
|
|
|
// Hanya ambil link yang berkaitan dengan One Piece
|
|
// if (stripos($title, 'One Piece') !== false) {
|
|
$episodes[] = [
|
|
'title' => $title,
|
|
'url' => $url,
|
|
];
|
|
// }
|
|
});
|
|
|
|
return response()->json($episodes);
|
|
}
|
|
}
|