เทคนิคการอ่านค่าจากเว็บไซต์ที่มีการเปลี่ยนแปลง (ราคาหุ้น) มาเก็บไว้บน Google Sheets

มีโจทย์ว่าต้องการคำนวนค่า Indicator ชื่อ RSI ของกองทุนรวมในต่างประเทศ ซึ่งปิดการซื้อขายเวลา 04:00 ของเวลาในประเทศไทย ทางกองทุนจะประกาศราคา (NAV) ในเวลาประมาณ 09:00 แต่ในการตัดสินใจลงทุน จะต้องพิจารณาค่า RSI ซึ่งกองทุนจะคำนวนและประกาศให้ประมาณ 12:00 ซึ่งบางทีก็หลงลืม และไม่ทันการ การคำนวนค่า RSI ใช้ค่าการเปลี่ยนแปลงของราคา แบ่งเป็น Gain และ Loss แล้วมาหาค่าเฉลี่ยและเข้าสูตรคำนวน (ไม่ขอกล่าวถึง หากต้องการทราบข้อมูลเพิ่มเติม อ่าน http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:relative_strength_index_rsi) สรุปคือ หากต้องการทราบค่า RSI ก่อนที่ทางกองทุนจะประกาศให้ ก็ต้องคำนวนเอง โดยจดค่าการเปลี่ยนแปลงของราคาในแต่ละวันซึ่งเป็นงานที่น่าเบื่อ จึงต้องหาวิธีลดภาระ แนวคิดคือ เว็บไซต์ http://www.bloomberg.com/quote/WGHCEPA:ID ซึ่งจะประกาศราคา NAV ในเวลา 09:00 นั้น หากเปิด HTML ดูจะพบว่าข้อมูลที่ต้องการจะอยู่ในรูปแบบของ … <meta itemprop=”price” content=”46.92″> … <meta itemprop=”priceChange” content=”0.16″> … <meta itemprop=”priceChangePercent” content=”0.34″> … <meta itemprop=”quoteTime” content=”2015-05-11T00:59:30-0400″> จากนั้น สร้าง Function ตามนี้ function getWGHCEPA(){ var content=UrlFetchApp.fetch(“http://www.bloomberg.com/quote/WGHCEPA:ID”); //'<meta itemprop=”priceChange” content=”0.16″>’; var data = content.getContentText().match(/meta itemprop=”(.*)” content=”(.*)”/mg ); var id=”xxxxxxxxxxxxxxxxxxxx Your file ID xxxxxxxxxxxxxx”; var db=SpreadsheetApp.openById(id); var table=db.setActiveSheet(db.getSheetByName(“Data”)); var result=[]; for (var i=0; i<data.length; i++){ var temp=data[i].match(/meta itemprop=”(.*)” content=”(.*)”/); result[temp[1]]=temp[2]; } table.appendRow([result[“quoteTime”], result[“price”], result[“priceChange”], result[“priceChangePercent”]]); } จากนั้น ตั้ง Trigger ให้ทำงานวันละครั้ง เวลาตั้งแต่ 09:00-10:00 เป็นอันเรียบร้อย ผลที่ได้

Read More »

Dialog cannot open tty-output

dialog บน Oracle Enterprise Linux และ Ubuntu ไม่เหมือนกัน (ทำไมล่ะ…ไม่ทราบครับ) สร้างสคริปต์ชื่อ file.sh มีข้อความว่า #!/bin/bash FILE=$(dialog –ascii-lines –title “Delete a file” –stdout \ –title “Please choose a file to delete” –fselect /tmp/ 14 48) echo $FILE บน Ubuntu รันได้ผลลัพธ์ แต่บน Oracle Enterprise Linux ต้องเปลี่ยนสคริปต์มีสองแบบ แบบแรก #!/bin/sh dialog –ascii-lines –title “Delete a file” –stdout \ –title “Please choose a file to delete” –fselect /tmp/ 14 48 2>/tmp/file.tmp echo $(cat /tmp/file.tmp) แบบที่สอง #!/bin/bash FILE=$(dialog –ascii-lines –title “Delete a file” –stdout \ –title “Please choose a file to delete” –fselect /tmp/ 14 48 2>&1>/dev/tty) echo $FILE ผลลัพธ์ของทั้งสองแบบให้ผลเหมือนกันคือ จบ..วันนี้ห้วนไปหน่อย ขอให้สนุกครับ

Read More »

ชีวิตสะดวกและปลอดภัยด้วยการ Sign In บน Google Chrome

เคยเจอปัญหาเหล่านี้เมื่อต้องไปใช้งานเครื่องอื่นที่ไม่ใช่เครื่องตนเองหรือไม่ ? จะเข้าเว็บไซต์ที่เคย Bookmark เอาไว้ในเครื่องตนเอง ก็ทำไม่ได้ ทำไงดีรหัสผ่านมากมาย เคยให้เว็บจำไว้ให้ แล้วตอนนี้จะใช้งานยังไงหล่ะ สภาพแวดล้อมไม่คุ้นชินเมื่อไปใช้เครื่องอื่น ปัญหาเหล่านี้จะหมดไป เมื่อใช้ Google Chrome และ ทำการ Sign In เอาไว้ คำเตือน: ผู้ที่จะใช้วิธีการนี้ ควรทำระบบ 2-Step Verification ไว้ก่อน เพื่อป้องกันรหัสผ่านรั่วไหล และป้องกัน กรณีมี Keyboard Logger ฝังตัวเพื่อดักการพิมพ์รหัสผ่านจาก Keyboard ซึ่งแม้จะมีผู้ร้ายดักรหัสผ่านไปได้ ก็จะติดขั้นตอนการยืนยันตัวตนอีกชั้นของ 2-Step Verification กรณีผู้ใช้ Google Apps ขององค์กร (ทั้ง For Education และ For Business) ระบบจะทำการสร้าง Profile แยกให้ แต่ถ้าเป็น Google Account ของ Gmail นั้น จะต้องทำการ Create Profile เอง แล้วจึง Sign In เข้าไป มิฉะนั้นข้อมูลของเราจะไปปะปนกับของผู้ใช้ทั่วไป ซึ่งไม่ปลอดภัยอย่างยิ่ง วิธีการนี้ ผู้ใช้ต้อง “Remove This Person” ทุกครั้งเมื่อจบการใช้งาน (จะอธิบายต่อไป) วิธีการใช้งาน เปิด Google Chrome ขึ้นมา ด้านขวามือบน ใกล้ๆ Tools Box คลิกรูป “คน” ดังภาพ แล้วคลิก Sign in to Chrome ใส่ Google Account (Gmail Account)  หรือ Google Apps Account (Google Apps For Education/Business) และรหัสผ่าน จากนั้นคลิก Sign In สำหรับท่านที่ทำ 2-Step Verification จะพบหน้าต่างให้ใส่ Code ก็ให้ดำเนินการตามปรกติไป สำหรับบัญชี Google Apps ขององค์กร จะแสดงหน้าต่างให้เลือกว่า จะสร้าง Profile ใหม่หรือไม่ แนะนำให้คลิกปุ่ม Create a new profile ต่อไป คลิกปุ่ม “Ok, got it” ใช้เวลาไม่นาน ระบบจะ Sync ข้อมูล Apps, Autofill, Bookmark, Extensions, History, Password, Settings, Themes, Opentabs มาให้ (สามารถเลือกได้ว่าจะ Sync อะไรมาบ้างได้) และทำการเข้ารหัส รหัสผ่านไว้ด้วย (เลือกได้ว่าจะเข้ารหัสด้วย Google Credential หรือจะสร้าง Paraphrase แยกต่างหาก — ในที่นี้ เลือกเป็น Google Credential) คราวนี้ ก็จะสามารถใช้งานได้เหมือนนั่งอยู่ที่เครื่องตนเองอีกทั้งวิธีการนี้ จะสามารถใช้งานได้ทั้งบน Smartphone และ Tablet ได้ด้วย ทำให้เมื่อ Save Bookmark เอาไว้บนคอมพิวเตอร์ ก็สามารถไปเปิดดูได้บน Tablet ได้ทันที เมื่อเลิกใช้งาน ให้ทำตามข้อ 2. แล้วคลิก Switch User แทน จากนั้น ที่รูป Profile ด้านมุมขวา คลิก Remove this person คลิก Remove this person อีกครั้งเพื่อยืนยัน เท่านี้ ข้อมูลก็จะปลอดภัยแล้ว 😉 หากต้องการปรับแต่งเรื่อง สิ่งที่ต้องการจะ Sync

Read More »

Spam 20150508

นี่คือจดหมายหลอกลวง อย่าหลงเชื่อ ห้ามคลิก หรือ Reply ให้ลบทิ้งทันที

Read More »

เริ่มต้นใช้งาน GAS Editor

เปิด https://drive.google.com แล้ว Login คลิกปุ่ม New > Google Sheets ตั้งชื่อไฟล์: GASWS1 เมนู Tools > Script Editor เลือก Blank Project ตั้งชื่อโปรเจค : myproject1 เมนู File > New > Script File ตั้งชื่อ: myscript1 แก้ไข myFunction() ตามนี้ function myFunction() { Logger.log(“Hello World”); } เมนู File > Save หรือ กดปุ่ม Ctrl+s เมนู Run > myFunction ดูผลได้ที่ เมนู View > Logs หรือ กดปุ่ม Ctrl+Enter สร้าง function myForLoop ดังนี้ function myForLoop(){ for (var i=1; i<=10 ; i++) { myFunction(); } } แล้ว Save ด้วย กดปุ่ม Ctrl+s เมนู Run > myForLoop ดูผลได้ที่ เมนู View > Logs หรือ กดปุ่ม Ctrl+Enter เมนู File > New > Script File ตั้งชื่อ myscript2 สร้าง function myDate ดังนี้ function myDate() { Logger.log(new Date()); } แล้ว Save ด้วย กดปุ่ม Ctrl+s เมนู Resources > All yours triggers คลิก No triggers set up. Click here to add one now. ตั้งค่า Run = myDate Event = Time-driven แล้วเลือกเป็น Minutes timers และ Every minute จากนั้นคลิกปุ่ม Save ดูผลได้ที่ เมนู View > Logs หรือ กดปุ่ม Ctrl+Enter  

Read More »