สวัสดีครับ บทความนี้เป็นบทความที่ 22 แล้วนะครับ ที่ผมจะมาเขียน ในซีรีย์
Learn 30 Android Libraries in 30 days
สำหรับบทความทั้งหมด อ่านได้จากด้านล่างครับ
สำหรับวันนี้ขอนำเสนอเรื่อง Twitter4J เป็น Java Library ที่เอาไว้จัดการกับ Twitter API ตัวนี้ไม่ใช่ตัว Official นะครับ ถูกสร้างมาเพื่อให้ใช้งาน Twitter API ได้ง่ายขึ้นและสะดวกขึ้น จุดเด่นคือ
- Java 100%
- รองรับ OAuth
- รองรับ Twitter API เวอร์ชัน 1.1
Installation
เปิดไฟล์ build.gradle
ขึ้นมา แล้วเพิ่ม dependencies ลงไปดังนี้
กด Sync Gradle เป็นอันเรียบร้อย
Usage
สำหรับขั้นตอนการใช้งาน Twitter4J ขั้นแรกนั้น เราต้องทำการ config ซะก่อนครับ วิธีการ Configuration นั้นทำได้หลายวิธี แต่สำหรับผม ขอเลือกใช้วิธี config ผ่าน ConfigurationBuilder
แบบนี้ครับ
ด้านบนเป็นตัวอย่าง การ config ค่า โดยใช้ค่า OAuthConsumerKey, OAuthConsumerSecret, OAuthAccessToken และ OAuthAccessTokenSecret ของ Twitter App คุณเอง โดยจะได้เมื่อเราทำการสร้าง Twitter Client App แล้ว
วิธีการสร้าง Twitter App ให้เข้าไปที่ Twitter Apps แล้วเลือก Create New App หรือจะกดลิงค์นี้เลยก็ได้ Create new App
ให้ทำการใส่ข้อมูลที่ต้องการ
- Name : ต้องไม่ซ้ำกับแอพคนอื่น
- Description: จะใส่อะไรไปก็ได้ อธิบายไว้ซักหน่อยก็ดี
- Website: ใส่ชื่อเว็บไซต์ (หากไม่มีก็ใส่อะไรไปก็ได้)
- Callback: ปล่อยว่างไว้
เลือก Yes, I agree แล้วก็ Create App ซะ
เมื่อเราสร้างแอพเสร็จแล้ว ให้เลือกที่แท็บ API Keys สังเกตจะเห็น API Key กับ API Secret ของเรา นั่นแหละครับ ส่วนนี้ที่เราจะเอาไปใช้
ต่อมา เรายังขาดอีก 2 Key ใช่มั้ย เลื่อนลงมาอีกนิดนึง กด Create my access token ทีนี้เราก็จะได้ Access token มาแล้ว ครบ 4 ทีนี้ก็เอาไปใส่ในที่เรา เว้นไว้เลยครับ
นำค่าทั้งสี่ค่า มาใส่ที่ ConfigurationBuilder
รูปแบบก็จะได้ดังนี้
Create Project
ลองสร้างโปรเจ็คกันดูเลยดีกว่า ตัวโปรเจ็คผมจะมี ListView ไว้แสดง tweet จากหน้า Timeline และก็มี EditText อันนึง เอาไว้ใส่ข้อความที่ต้องการ Tweet ครับ หน้าเลเอาท์ เลยจัดแบบนี้ (ไม่ได้ปรับแต่งอะไรเลย เน้นไวไว้ก่อนครับ) ไฟล์ activity_twitter4j.xml
มีดังนี้
ไฟล์ res/values/strings.xml
ส่วนไฟล์ Twitter4JActivity.java
ก็สร้างดังนี้
โค๊ดด้านบน เมื่อเราทำการสร้าง TwitterFactory
จาก ConfigurationBuilder
แล้ว ก็สั่งให้ factory.getInstance().updateStatus()
เพื่อทำการโพสลง Twitter ครับ ลองรันโปรแกรมดูเลย เมื่อเปิดแอพมา จะมีข้อความไปโผล่ใน Tweet แบบที่ตั้งใจไว้หรือไม่?
ปรากฎว่ามี Error ครับ แอพรันไม่ได้
อะฮ่า 401:Authentication credentials, Read-only application cannot POST.
คงเดากันได้ไม่ยากครับ คือไม่มีสิทธิ์เข้าถึงข้อมูล เพราะอะไร? ลองกลับไปดูที่ส่วน Application Settings ในหน้าเว็บดูครับ สังเกตที่ Access Level เราตั้งให้มันแค่ Read-Only
ฉะนั้นแอพนี้มีสิทธิ์แค่ อ่าน Tweet จาก Timeline ได้เท่านั้น ไม่มีสิทธิ์ โพส Tweet หากเราต้องการให้มัน tweet ได้ด้วย ก็ต้องไปเปลี่ยน Access Level เป็น Read and Write ครับ
เลือกเปลี่ยน Modify app permission เป็น Read and Write และทำการ Regenerate API Keys และ Regenerate my access token key ใหม่ด้วย เพื่อให้แน่ใจว่าได้สิทธิ์ Read and Write แล้ว
จากนั้นก็ใช้ API Keys อันใหม่ ไปแทนของเก่าครับ ทดสอบรันแอพอีกครั้ง คราวนี้ Error Network OnmainThreadException ครับ ต้องใช้ AsyncTask มาช่วย
ทีนี้ก็ไม่มี error แล้ว พอเปิดดูหน้า Twitter ผม ได้ข้อความนี้ขึ้นมา
ทีนี้ เรามี EditText และ Button นี่นา ก็ใช้มันกรอกข้อความ จากนั้นก็กด Button ถึง Tweet ดีกว่าเปิดแอพมาแล้ว Tweet ก็เลยจัดการ เปลี่ยนเป็นให้โพส Tweet เมื่อมีการกดปุ่ม Button เท่านั้น ก็เพิ่มนี้ลงไป
สุดท้ายแล้ว ListView เอาไว้แสดง Timeline จาก Twitter ก็ใช้คำสั่งนี้ครับ
สร้าง AsyncTask อีกอันสำหรับ Timeline
จากโค๊ดด้านบน ทำการสร้าง AsyncTimeline
ซึ่ง extend AsyncTask เอาไว้ดึงข้อมูล Timeline มา จากนั้นผมก็นำมาใส่ใน mTimeline
ซึ่งเป็น ArrayList<String>
จากนั้นก็นำมาแสดงใน ListView
เมื่อเปิดแอพดู ก็จะได้หน้าตาแบบนี้
ไฟล์ของบทความนี้ Twitter4jActivity.java ลองเอาไปรัน และลองทดสอบเล่นกันดูนะครับ ส่วนรายละเอียดต่างๆ อ่านจากเว็บต้นฉบับ มีวิธการตั้งค่า การใช้งานอยู่ครบถ้วนครับ
Happy Coding :D
Reference