Cek Broken Link pada File PDF dengan PyPDF2 dan Google Sheets

Latar Belakang

Kadang diperlukan juga, untuk mengecek hyperlink yang terdapat dalam dokumen PDF, apakah link-link tersebut valid, mengarah pada halaman yang tersedia atau tidak.

Contohnya dokumen PDF akreditasi yang diupload dan akan dibaca oleh asesor.

Dokumen seperti ini perlu dipastikan bahwa seluruh hyperlink-nya valid, sebab jika asesor mencoba dan menemukan invalid link, dapat berpotensi pada pengurangan nilai. 

Disclaimer

Penulis sebenarnya tidak suka Python, namun karena belum dapat membuat library PDF Reader sendiri, maka mohon maaf penulis tetap menggunkan PyPDF2, untuk mempercepat pekerjaan saja.

Langkah

Pertama-tama, letakkan file extract Hyperlink.py dan PDF yang akan di cek hyperlink-nya dalam satu folder. Dalam contoh posting ini, file PDF yang akan di cek bernama SURVEYLANCE_LED A-B_PSSI (1).pdf.


Lalu tuliskan script Python di bawah ini, pada file extract Hyperlink.py.

Kode extract Hyperlink.py

import PyPDF2
import urllib.request as urllib2

PDFFile = open("SURVEYLANCE_LED A-B_PSSI (1).pdf",'rb')

PDF = PyPDF2.PdfFileReader(PDFFile)
pages = PDF.getNumPages()
key = '/Annots'
uri = '/URI'
ank = '/A'

for page in range(pages):
    pageSliced = PDF.getPage(page)
    pageObject = pageSliced.getObject()
    if key in pageObject.keys():
        ann = pageObject[key]
        i=-1;
        for a in ann:
            i+=1;
            u = a.getObject()
            if ank in u:
                if uri in u[ank].keys():
                    print((page+1)," ",i,"  ",u[ank][uri])

Sesuaikan nama file PDF yang akan di extract hyperlinknya dan run module tersebut.

Jika berhasil, running akan menghasilkan nomor halaman, urutan link berdasarkan halaman (mulai dari nol) dan link itu sendiri, pada tiap link yang ditemukan seperti gambar di bawah ini:

Selanjutnya siapkan file Google Sheets dengan nama Broken Link, yang terdiri dari Sheet Broken Link dan Ambil. Di mana template file ini dapat didownload pada link Template Broken Link.

Kemudian tambahkan kode Apps Script berikut melalui menu Extensions-Apps Script. Nama Project dapat diubah menjadi Check Broken Link, atau sesuai keinginan.

Kode Apps Script

function getStatus(url)
{
   var options = {
   'muteHttpExceptions': true,
   'followRedirects': false
   };
   
   var url_trimmed = url.trim();
   var response = UrlFetchApp.fetch(url_trimmed, options);
   return response.getResponseCode();
}

Lalu copy hasil run module Python pada langkah sebelumnya, dan paste Value Only mulai kolom A baris kedua.

Setelah itu seleksi data di kolom A di atas, pilih menu Data-Split Text to Column untuk memisahkan data tersebut menjadi tiga kolom.

Begitu kolom B terisi, maka fungsi getStatus pada tiap baris kolom D, akan mencoba mengakses link yang diberikan, dan mengembalikan hasil berupa kode HTTP Status.

Kode HTTP Status yang dimaksud adalah seperti:

  • 200 OK
  • 301 Moved Permanently
  • 302 Found
  • 400 Client Error
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 500 Internal Server Error
Setelah semua percobaan akses selesai, sheet Broken Link adalah rekapitulasi link yang gagal diakses (HTTP Status 4xx atau 5xx), yang bersumber dari sheet Ambil.



Untuk lebih jelasnya, langkah-langkah di atas dapat dilihat pada video dibawah ini:



Komentar



Postingan populer dari blog ini

Review Pengguna yang Berperilaku Konsumtif

Ijazah lebih Penting Dibanding Skill

TPlanning 3.1 untuk Optimasi Dosis Paparan Radioterapi

Sedikit Tahu mengenai Pendaftaran Haji Tahun 2017

Membuat Kalkulator Interpolasi Bilinear dengan Javascript

Bagaimana Mendapatkan Penghasilan dari Aplikasi Android

Eliminasi Gauss-Jordan untuk Invers Matrix dengan Java

Apakah Kuliah untuk Bekerja

Game TicTacToe dengan Greenfoot

Menambahkan reCAPTCHA v2 pada Login Form