Python เรียก Web Service ราคาน้ำมัน ของ ปตท

ได้เห็นคุณ  เขียนการใช้ PHP เรียก Web Service ราคาน้ำมันของ ปตท เลยอยากลองใน Python บ้าง แต่เนื่องจาก Python มี Package มหาชนให้เลือกใช้เยอะไปหมด ตัวมาตรฐานที่ให้มาก็ซับซ้อนเกินงาม โดยสรุป ผมทำได้สั้นสุด เท่านี้ครับ


from zeep import Client
from lxml import etree

client = Client('http://www.pttplc.com/webservice/pttinfo.asmx?WSDL')
result = client.service.CurrentOilPrice("en")

root = etree.fromstring(result)

for r in root.xpath('DataAccess'):
    product = r.xpath('PRODUCT/text()')[0]
    price = r.xpath('PRICE/text()') or [0]
    print(product,float(price[0]),' BAHT')

Output

ผมสรุปว่า
  1. SimpleXMLElement ของ PHP ทำให้ Parse XML ที่คืนมาในรูปแบบ String ได้ง่ายมาก (แต่ก็นะ WebService นี้ตอบมาเป็น plain string ซะงั้น คืนมาเป็น Object จะเข้าทางมากกว่านี้)
  2. วุ่นวายอ่าน review หา SOAP Client ที่เหมาะสม แล้วไหนต้องระวังว่าจะ obsolete ไปแล้วด้วย สุดท้ายเลือก zeep ครับ และ code นี้ต้องลง zeep เพิ่ม แล้วจะได้ lxml มาด้วย ลง zeep ด้วย pip แสนง่ายดายด้วย
    pip install zeep


Comments