iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
4
Modern Web

ML X 友廷等公車系列 第 9

Day 9 : Firebase

What is Firebase ?

Firebase是Firebase,Inc。於2011年開發的移動和Web應用程序開發平台,隨後於2014年被Google收購。截至2018年10月,Firebase平台共有18種產品,150萬個應用程序使用這些產品。 wiki

Firebase 支援 Android、iOS及網頁的app雲端開發平台。 截錄出處

  • 開發(Develop)
    安全且高效能。
    提供的後端服務 include 即時資料庫 (Realtime database)
    簡單的身分驗證模組(Authentication)、雲端訊息(Cloud Messaging)、
    主機(Hosting)、檔案儲存(Storage)、及遠端配置(Remote Config)等
    讓使用者可以輕鬆測試不同環境(OS與硬體裝置)的產品運作是否正常及順暢
  • 成長(Grow) : 與Google的深度整合,串接app行為資料,讓使用者(app開發者)提供更精準的廣告或溝通訊息給顧客。
  • 獲利(Earn) : 廣告。
  1. 事件紀錄無上限
  2. 支援原始資料自動匯出 巨量資料分析 PB等級的資料 BigQuery
    BigQuery:
  • 收費 : 查詢和資料儲存
  • 免費 : 資料載入和匯出

    圖片提供:Steven Hsieh
  1. 可直接行動的分析工具 : 將客戶群分類,推撥(push)廣告給目標族群。

Why i use Firebase ?

在使用過SQL Server(Microsoft),再裝 Visual Studio,安裝時間久,耗記憶體。 (壞印象)
但其實很多國家考試都很喜歡考 (C# plus SQL) ,而通常會使用的開發平台為以上所提的兩個。
接Case時,分析需求後,思考使用的工具,PHP plus MySQl 最為適當。
在 安裝上 我使用 XAMPP ,簡易網頁伺服器,還包含MySQL。 安裝快速,不會耗記憶體,方便使用。(好印象)
這次想來嘗嘗鮮,且不想總是開著電腦(收集OpenData),所以我選擇 FireBase來體驗看看。

How to use Firebase ?

可以看看這位大師寫的教學文

Firebase Monitoring.

Limit.


Code

設定firebase的存取

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
cred = credentials.Certificate('./serviceAccount.json') # 憑證放置路徑
firebase_admin.initialize_app(cred)
db = firestore.client()

介接API的資料

from hashlib import sha1
import hmac
from wsgiref.handlers import format_date_time
from datetime import datetime
from time import mktime
import base64
from requests import request
from pprint import pprint
import json
app_id = ''
app_key = ''
class Auth():
    def __init__(self, app_id, app_key):
        self.app_id = app_id
        self.app_key = app_key
    def get_auth_header(self):
        xdate = format_date_time(mktime(datetime.now().timetuple()))
        hashed = hmac.new(self.app_key.encode('utf8'), ('x-date: ' + xdate).encode('utf8'), sha1)
        signature = base64.b64encode(hashed.digest()).decode()
        authorization = 'hmac username="' + self.app_id + '", ' + \
                        'algorithm="hmac-sha1", ' + \
                        'headers="x-date", ' + \
                        'signature="' + signature + '"'
        return {
            'Authorization': authorization,
            'x-date': format_date_time(mktime(datetime.now().timetuple())),
            'Accept - Encoding': 'gzip'
        }
import os
import time
from apscheduler.schedulers.blocking import BlockingScheduler
def tick():
    global str1
    a = Auth(app_id, app_key)
    response = request('get', "https://ptx.transportdata.tw/MOTC/v2/Bus/RealTimeByFrequency/InterCity/9018?$filter=Direction%20eq%20'0'&$top=150&$format=JSON", headers= a.get_auth_header())
    str1 = str(response.content,'utf-8')
    jsonValue = json.loads(str1)
    for item in jsonValue:
        print('GPSTime:'+item['GPSTime'])
        print(item['BusPosition']['PositionLat'])
        print('經度:',item['BusPosition']['PositionLon'])
        print('Speed',item['Speed'])
        doc = {
            'PlateNumb': item['PlateNumb'],
            'GPSTime': item['GPSTime'],
            'Lat':item['BusPosition']['PositionLat'],
            'Lon':item['BusPosition']['PositionLon'],
            'Speed':item['Speed']
        }
        doc_ref = db.collection("bus").document(item['GPSTime'])
        doc_ref.set(doc)

設定排程 每五秒進行爬取

if __name__ == '__main__':
    scheduler = BlockingScheduler()
    scheduler.add_job(tick, 'interval', seconds=5)
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C    '))

    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass

Demo (產出資料)

Official Review (使用心得)


改自劉沛影片
簡單易上手,讚啦 ~~~ 未來請多多指教!!!

Follow Me

Ref


上一篇
Day 8 繪製彎彎曲曲的路線
下一篇
Day10 : 讀取 Firebase
系列文
ML X 友廷等公車30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
長風青雲
iT邦新手 4 級 ‧ 2019-09-10 03:21:04

看到壞印象那邊我笑了XDDD
Visual Studio 真的超當
而且那個時候我安裝 Microsoft SQL 2012裝了好多次
都不知道為什麼我家小黑都像腦殘一樣無法安裝

其實我在外面的面試的時候,上機考她是讓我用VS寫
我當時:???我可以用線上編輯器嗎?(幸好人家說可以XD)
但是我其實不能理解為什麼他們要用VS,不覺得耗效能嗎?

原來這就是你前陣子跟我說GCP不用錢的嗎?
當時你說完我去查有看到BigQuery可是還沒細看哈哈哈

看更多先前的回應...收起先前的回應...
阿瑜 iT邦研究生 4 級 ‧ 2019-09-10 08:25:23 檢舉

現在有 Visual Studio Code (目前有下載)

Visual Studio Code(簡稱VS Code)是一個由微軟開發,同時支援Windows 、 Linux和macOS等操作系統且開放原始碼的程式碼編輯器[4],它支援測試,並內建了Git 版本控制功能,同時也具有開發環境功能,例如程式碼補全(類似於 IntelliSense)、程式碼片段和程式碼重構等,該編輯器支援用戶個性化組態,例如改變主題顏色、鍵盤捷徑等各種屬性和參數,同時還在編輯器中內建了擴充程式管理的功能。

不會像 VS 那麼膨脹,但VS同時可以使用db,我不確定VSC有沒,他應該是純編輯器,支援多種語言。


對的 ,GCP 有免費額度。
可以直接操作 BigQuery 撈資料速度極快。
// 體驗 Google ML Study Jam 的 QuickLab 的心得 //

原來是這樣 我當時到是沒注意他他是VSC還是VS
只是看到那個長相 我第一時間就是拒絕的XD

原來你有去玩那個!好玩嗎?
我是有看到,但是我想說也許可以下次哈哈哈,畢竟我雖然超前進度寫,卻也只有五天coda QQ
那我之後也去玩玩看~

阿瑜 iT邦研究生 4 級 ‧ 2019-09-10 13:38:19 檢舉

大部分都沒有用他來寫程式ㄟ
只是裝來運行不同程式語言~~~
可以 run 的起來就沒碰了。
大部分 都用 NotPad 來寫
Python 如果跟機器學習有關的就用 Spyder 。

我最近是用sublime
不過兩個其實只差長相XD
AI我是直接pip install jupyter
以前裝anaconda花超久時間也裝了很多我用不到的
乾脆自己下載需要用到的就好了XD

阿瑜 iT邦研究生 4 級 ‧ 2019-09-10 20:03:32 檢舉

/images/emoticon/emoticon12.gif

0
arguskao
iT邦新手 4 級 ‧ 2022-11-21 12:03:14

Bigquery是屬於NoSql 嗎?

阿瑜 iT邦研究生 4 級 ‧ 2022-12-26 00:39:31 檢舉

From https://chat.openai.com/chat

Google Cloud BigQuery 是一種提供大資料分析服務的雲端平台,它提供了一種用於處理大型資料集的 SQL 類型查詢語言。

BigQuery 使用一種稱為 Standard SQL 的 SQL 語言,這是一種由 ANSI(美國國家標準學會)所採納的標準 SQL 語言。BigQuery 也支援一些額外的語言功能,包括自定義函數、資料結構和查詢擴充功能。

因此,可以說 BigQuery 是一種基於 SQL 的大資料分析服務。

我要留言

立即登入留言