เขียน PHP ให้ย่อ URL กับ Bit.ly

Biy.ly เป็นบริการให้ย่อ URL ตัวหนึ่งที่ได้รับความนิยมมาก (อันเนื่องมาจากทวิตเตอร์) ซึ่งบล็อกของผมก็ใช้บริการอยู่เหมือนกัน (ลองสกรอลลงไปดูข้างล่างครับ ตรง QR Code จะเห็น URL สั้นที่เป็น bit.ly อยู่)

แน่นอนครับว่าผมไม่ได้นั่งย่อ URL แล้วเอามาแปะเองกับมือเป็นแน่ ผมใช้วิธีเขียนฟังก์ชั่นสำหรับย่อมันอัตโนมัติลงไปใน functions.php ของไฟล์ธีม (จริงๆมันมีปลั๊กอินครับ แต่ผมมันสายอินดี้ อยากเขียนเอง !)

มานั่งคิดดู มันอาจจะมีประโยชน์กับคนที่เขียนเว็บเอง มาครับ มาดูกันว่าเราจะเขียน PHP ให้ไปย่อ URL กับเว็บ Bit.ly ได้อย่างไร

อย่างแรกที่เราต้องการสำหรับการย่อย URL ผ่าน API ของ Bit.ly คือ API Key ครับ สามารถหาได้โดยการสมัครสมาชิกกับ Bit.ly จัดการยืนยันตนให้เรียบร้อย แล้วเข้าไปที่หน้า Account จะพบกับ API ระบุอยู่

ได้มาแล้ว ลองไปคุ้ย API Document ดูกัน

เอาล่ะครับ ผมจะพาเขียนเป็นฟังก์ชัน เวลาเรียกใช้จะได้เรียกใช้ง่ายๆ (ใครจะเขียนเป็นคลาสสำหรับจัดการ Bit.ly ทั้งหมด ก็ไม่ว่ากัน)

จากใน API Document คุ้ยดูเราจะพบ 3 พารามิเตอร์ที่ต้องการสำหรับการย่อ URL ในแต่ละครั้ง คือ

  1. login
  2. apiKey
  3. longUrl

ดังนั้น เล่นกันซื่อๆ เราเริ่มต้นฟังก์ชันของเราดังนี้ครับ

<?
function bitlyShort ($login, $apiKey, $longUrl) {

}
?>

ไปเช็คดู REST API สำหรับย่อ URL เวลาใช้จะมีลักษณะดังนี้

http://api.bit.ly/v3/shorten?login=<login>&apiKey=<apiKey>&longUrl=<longUrl>&format=json

จริงๆตรง format สามารถเลือกได้ 3 แบบ คือ JSON, XML และ TXT แต่ว่าผมพอใจจะใช้แบบ json มากกว่าครับ? ส่วน longUrl จะต้องผ่านการ urlencode ด้วย จึงจะใช้ได้ครับ

ซึ่งหากลองกรอกค่าลงไปทาง Address Bar ในเบราว์เซอร์ให้ถูกต้อง จะพบว่ามันคืนค่ามาเป็นโค๊ด JSON ดิบๆให้เรามาใช้ได้เลย ดังนั้นแล้วเราจึงเล่นกับมันได้ 3 รูปแบบ คือร้องขอผ่าน cURL, file_get_contents?และ fsockopen หรือใครจะหาวิธีพิศดารอะไรกว่านี้มาเล่น ก็ไม่ว่าอะไร

แต่ในเคสนี้เราจะเล่นกับ file_get_contents เหตุผลเพราะมันแค่บรรทัดเดียวจบ

เอาล่ะครับ เราจะใช้ file_get_contents?เรียกไปที่ REST_API เพื่อเก็บค่าที่มัน return กลับมาลงในตัวแปล $json ซึ่งเมื่อแทนที่ค่าจากตัวอย่างด้วยตัวแปรที่ฟังก์ชันรับเข้ามาแล้ว โค๊ดของเราจะมีหน้าตาดังนี้

<?
function bitlyShort ($login, $apiKey, $longUrl) {
 $json = file_get_contents("http://api.bit.ly/v3/shorten?login=". $login ."&apiKey=". $apiKey ."&longUrl=". urlencode($longUrl) ."&format=json");
}
?>

ทีนี้แล้วถ้าเราลองใช้ var_dump ส่องดูว่า Bit.ly คืนค่าอะไรมาให้เราบ้าง (ในกรณีที่ login และ apiKey ถูกต้อง) ก็จะได้หน้าตาออกมาประมาณนี้

{
 "status_code": 200,
 "status_txt": "OK",
 "data": {
 "long_url": "http://jirayu.info",
 "url": "http://bit.ly/cWlO9v",
 "hash": "cWlO9v",
 "global_hash": "buei2K",
 "new_hash": 1
 }
}

จากนั้นเราจะมาใช้ json_decode เพื่อแปลง JSON ให้ไปเป็นตัวแปรแบบ array อีกทีหนึ่ง โดยเราจะยัดเอาไว้ในตัวแปร $decode กัน ดังนั้น ตอนนี้โค๊ดของเราจะหน้าตาดังนี้

<?
function bitlyShort ($login, $apiKey, $longUrl) {
 $json = file_get_contents("http://api.bit.ly/v3/shorten?login=". $login ."&apiKey=". $apiKey ."&longUrl=". urlencode($longUrl) ."&format=json");
 $decode = json_decode($json,true);
}
?>

ซึ่งตอนนี้หากเราลอง var_dump ออกมาดู เราจะเห็นค่าต่างๆจากภายในตัวแปร ดังนี้

array(3) {
 ["status_code"]=>
 int(200)
 ["status_txt"]=>
 string(2) "OK"
 ["data"]=>
 array(5) {
  ["long_url"]=>
  string(18) "http://jirayu.info"
  ["url"]=>
  string(20) "http://bit.ly/cWlO9v"
  ["hash"]=>
  string(6) "cWlO9v"
  ["global_hash"]=>
  string(6) "buei2K"
  ["new_hash"]=>
  int(1)
 }
}

ซึ่งเมื่อเราต้องการจะคืนค่า URL กลับออกมานอกฟังก์ชัน เราก็เพิ่มคำสั่ง return $decode[‘data’][‘url’]; ลงไป แค่นั้น ซึ่งเราจะได้ฟังก์ชันหน้าตาประมาณนี้ครับ

<?
function bitlyShort ($login, $apiKey, $longUrl) {
 $json = file_get_contents("http://api.bit.ly/v3/shorten?login=". $login ."&apiKey=". $apiKey ."&longUrl=". urlencode($longUrl) ."&format=json");
 $decode = json_decode($json,true);
 return $decode['data']['url'];
}
?>

แค่นี้เองครับ ฟังก์ชันสำหรับย่อ URL ด้วย Bit.ly !!! เวลาใช้งานก็เพียงแค่กำหนดตัวแปรที่ต้องใช้ทั้งสามตัว แล้วโยนเข้าไปในฟังก์ชัน ดังนี้

<?
$login = "jirayu";
$apiKey = "R_fe33ccbd7be867d77643c02c1c2034fd";
$longUrl = "http://jirayu.info";

echo bitlyShort($login, $apiKey, $longUrl);
?>

ผลที่ออกมา ก็จะเป็นดังนี้

ปล.ความสามารถเทพๆอย่างหนึ่งของ Notepad++ ก็คือปรับ View เป็นแบบ Post-it ที่จะแสดงแค่ส่วนโค๊ด ไม่มีพวก Toolbar อะไรมาเกะกะแบบในภาพ เออ เท่ดีครับ

Posted by Jirayu

WordPress Developer ที่พอมีประสบการณ์อยู่บ้าง วันไหนไม่ทำงานอยู่บ้านว่างๆ ก็นั่งเลี้ยงแมว

Comments