บทความนี้เรามาลองทำการติดตั้ง Printer ด้วยโปรแกรม CUPS (Common Unix Printing System) และทำการเขียนโปรแกรมด้วย PHP เพื่อติดต่อกับ Instagram API เพื่อดึงข้อมูลรูปที่มี #Hashtag ที่ต้องการมาสั่งพิมพ์อัตโนมัตที่เครื่องปริ้นของเรา โดยผมจะไม่ได้ลงรายละเอียดเกียวกับ Instagram API ผู้อ่านต้องหาความรู้เพิ่มเติมเองนะครับ โดยโค้ดที่ผมเขียนจะเป็นโค้ดง่ายๆ เพื่อให้กระชับ ซึ่งหากว่าทำตามได้แล้ว เราอาจจะนำไปใช้สำหรับงานแต่งงานหรืองานอีเว้นต่างๆได้ครับ เช่นในงานแต่งเราอาจจะให้ผู้ร่วมงานทำการถ่ายรูปบรรยากาศในงานแล้วอัพรูปใน Instagram พร้อมทั้งใส่ Hashtag ที่เรากำหนดไว้ จากนั้นเครื่องของเราก็จำทำการปริ้นรูปทั้งหมดออกมา เราสามารถนำรูปไปติดในงานสร้างความเก๋ไก๋ได้ไม่น้อย
เริ่มจากติดตั้ง CUPS
1 | sudo apt-get -y install cups |
กำหนด Group lpadmin ให้กับ User pi
1 | sudo usermod -a -G lpadmin pi |
เปิดไฟล์คอนฟิกของ CUPS ขึ้นมาแก้ไข
1 | sudo nano /etc/cups/cupsd.conf |
หาบรรทัดที่เขียนว่า Listen localhost:631 แล้วแก้ไขเป็น Port 631
1 2 | #Listen localhost:631 Port 631 |
และในส่วนของ Location ให้เพิ่ม Allow @local เพื่อให้สามารถ Access ได้จากทุกเครื่องในเน็ทเวิร์ค
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Restrict access to the server... <Location /> Order allow,deny Allow @local </Location> # Restrict access to the admin pages... <Location /admin> Order allow,deny Allow @local </Location> # Restrict access to configuration files... <Location /admin/conf> AuthType Default Require user @SYSTEM Order allow,deny Allow @local </Location> |
สั่ง Restart Service CUPS
1 | sudo service cups restart |
จากนั้นกลับมาที่เว็บบราวเซอร์เพื่อทำการคอนฟิกปริ้นเตอร์ โดยเปิดไปที่ URL http://RASPI.IP.ADDRESS:631/ (ในตัวอย่างของผมก็จะเป็น http://192.168.8.102:631/) เมื่อเข้ามาแล้วให้คลิกที่แท็บ Administration ซึ่งจะต้องใส่ user และ password ให้เราใส่ user และ password ที่ล๊อกอินเข้า Raspberry Pi (ของผมก็จะเป็น user = pi และ password = raspberry //ไม่เคยเปลี่ยนตั้งแต่ได้มา)
ในแท็บ Administration ให้เลือกไปที่ Add Printer เพื่อทำการเพิ่มปริ้นเตอร์ใหม่ โดยให้เลือกไปที่ชื่อปริ้นเตอร์ของเรา (ของผมก็เป็น Canon iP2700 series (Canon iP2700 series))
เพื่อความแน่ใจว่าปริ้นเตอร์ของเราถูกเซ็ทเป็นดีฟอลแล้ว ให้คลิกไปที่แท็บ Printers และเลือกไปที่ปริ้นเตอร์ที่เราได้ทำการเพิ่มเข้าไป จากนั้นเลือก Set As Server Default
เมื่อเพิ่มปริ้นเตอร์เรียบร้อยแล้วให้กลับมาที่ Command Line ของ Raspberry Pi เพื่อทำการทดสอบสั่งปริ้น โดยใช้คำสั่ง lp filename (filename คือชื่อไฟล์ที่จะสั่งปริ้นนะครับ)
1 | lp filename |
ตัวอย่าง เราจะลองสั่งปริ้นไฟล์ที่เราเคยสร้างไว้กับการทดลองเมื่อครั้งก่อนๆ
1 | lp /var/www/gpio.php |
ลองสั่งปริ้นรูปดูบ้าง
1 | lp -o media=Custom.10x15cm image-file.jpg |
เมื่อสั่งปริ้นออกเครื่องพิมพ์ได้แล้ว ต่อไปเรามาทำโปรแกรมดึงข้อมูลจาก #Hashtag ของ Instagram ดูบ้างครับ ในตัวอย่างที่เราจะทดลองกันเราจะทดลองจาก #Hashtag คำว่า #cat นะครับ โดยผู้อ่านสามารถศึกษาเพิ่มเติมได้จาก http://instagram.com/developer/
สร้างโฟลเดอร์ไว้เก็บไฟล์กันก่อน
1 2 3 4 5 | sudo mkdir /var/www/instagram sudo mkdir /var/www/instagram/download sudo mkdir /var/www/instagram/complete sudo chmod 777 /var/www/instagram/download sudo chmod 777 /var/www/instagram/complete |
จากนั้นเขียนโปรแกรมดึงรูปจาก Instagram
1 | sudo nano /var/www/instagram/instagram-hashtag.php |
จากนั้นพิมพ์คำสั่งต่อไปนี้ลงไป โดยโค้ดจะเป็นโค้ดง่ายๆ ผู้อ่านต้องไปต่อยอดกันเอาเองนะครับ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php //เปลี่ยน Access Token เป็นของตัวเองด้วยนะครับ $strTokenId = "13639518.3df63d4.9811f5c2d2a647f29af4b3f35e805610"; $strJsonData = file_get_contents("https://api.instagram.com/v1/tags/cat/media/recent?access_token={$strTokenId}"); $arrJsonData = json_decode($strJsonData, true); //print_r($arrJsonData[data]); foreach ($arrJsonData[data] as $arrImg) { $intInstagramId = $arrImg['id']; $strImgName = $arrImg['images']['standard_resolution']['url']; // Download New File if(!is_file("/var/www/instagram/download/{$intInstagramId}.jpg")){ copy($strImgName,"/var/www/instagram/download/{$intInstagramId}.jpg"); } // Image For Print if(!is_file("/var/www/instagram/complete/{$intInstagramId}.jpg")){ copy("/var/www/instagram/download/{$intInstagramId}.jpg","/var/www/instagram/complete/{$intInstagramId}.jpg"); exec("/usr/bin/lp -o media=Custom.10x15cm /var/www/instagram/complete/{$intInstagramId}.jpg"); } } print "OK"; ?> |
จากนั้นกำหนดให้โปรแกรมทำงานอัตโนมัติ โดยเพิ่มคำสั่งใน crontab ให้โปรแกรม instagram-hashtag.php ทำงานทุกๆ 5 นาที สั่ง crontab -e ระบบจะเปิด nano ขึ้นมาให้ (บน Raspberry Pi มันเปิด nano ให้เลย แต่บน Linux ตัวอื่นเท่าที่ผมเคยลองมันเปิด vi นะ)
1 | sudo crontab -e |
เพิ่มคำสั่งต่อไปนี้ลงไป
1 | */5 * * * * /usr/bin/php /var/www/instagram/instagram-hashtag.php |
เรียบร้อยแล้วครับ เท่านี้ภาพที่มี #Hashtag ที่ต้องการ ก็จะถูกปริ้นออกมาแล้วครับ งานทดลองนี้สามารถเอาไปต่อยอด โดยการเพิ่มกรอบของภาพ และใส่ลูกเล่นเช่นพิมพ์ชื่องานลงไปในภาพก็ได้ ยังไงก็ลองต่อยอดกันดูนะครับ