Quantcast
Channel: WFU BLOG
Viewing all 571 articles
Browse latest View live

如何使用 Node.js 播放 mp3 聲音檔(作為提醒音效)?

$
0
0
原本認為 Node.js 播放 mp3 音效是很簡單的一件事,畢竟在瀏覽器連寫 js 都不需要,HTML5 內建的 Audio 就能播放各種音檔。然而安裝了一大堆 Node.js 模組後卻都不成功,不知道問題出在哪。 Google 找答案的過程發現,很多人無法理解為何有這樣的需求,認為 Node.js 在伺服器端執行,播放音樂給伺服器聽要做什麼? 其實我用 Node.js 是運作在 Windows 本地端,執行長時間的作業。而同時一邊進行文書處理、或是離開座位時,並沒有一個好的機制,可以提醒自己 Node.js 程式出錯了,或是執行結束了。如果要不斷手動切換檢查,會十分缺乏效率。 所以 Node.js 捕捉到錯誤事件時自動播放 mp3 音檔,無論當下是否在電腦前都能立即處理,不至於發生過了一整天才發現程式早就卡住這樣的事。 那麼接下來就分享在 Node.js 環境下,要怎麼做才能成功播放 mp3 音效。 (圖片出處: pxhere.com)

一、為何 Node.js 模組無法播放聲音檔

例如我裝了以下模組,但播放後都聽不到聲音: 看了許多網上的討論後才知道,這類模組不能自行播放檔案,而是需要呼叫播放程式來播放。例如上面的「play-sound」,其官網頁面有說明,支援列出的 audio player,例如「mplayer」、「aplay」,或是 Windows 系統程式「powershell」。 若使用者的 Windows 系統沒有安裝這些程式,或是沒把這些程式的執行檔設為全域變數,就無法正確呼叫對應的執行檔,自然無法成功播放聲音檔。 而 Node.js 若是仔細尋找,也是可以找到真正能播放聲音檔的模組,但因為只是要播放提醒音效這樣的小事,不太願意另外裝個肥大的模組,想再找找有沒有更簡便的解決方案。

二、DOS 命令如何播放聲音檔

Node.js 有辦法執行 DOS 命令,所以接下來只要瞭解 DOS 如何播放聲音檔就沒問題了。 根據這篇「dos命令發出聲音圖文教程」,DOS 指令播放聲音檔真是超乎意料的簡單,只需直接輸入檔案路徑就好。簡單舉例,播放 D 槽下的 "wfu.mp3",只要輸入以下指令即可: D:\wfu.mp3 Windows 會自動跳出播放音檔的預設程式,例如 Windows Media Player,並播放這個檔案。

三、Node.js 如何呼叫 DOS 指令

根據這篇「Node.js 多進程」,載入 child_process模組後,有兩種方法可以執行 DOS 指令:
  • spawn
  • exec
以下分別舉例這兩種操作方式: const {exec} = require("child_process"); exec("cmd.exe /c wfu.mp3"); const {spawn } = require("child_process"); spawn("cmd.exe", ["/c wfu.mp3"]);任選一組來執行即可,這會是 Node.js 播放聲音檔最簡單的方式,不需安裝外掛模組,直接呼叫內建 child_process 模組即可。
更多 相關文章:

AI 生成圖庫精選﹍CC0 免費圖庫的新選擇

$
0
0
openart-cover.jpg-AI 生成圖庫精選﹍CC0 免費圖庫的新選擇今年「ChatGPT」蔚為風潮,讓 AI 技術受到世人關注,同時 AI 發展也進入了科技奇異點的突破程度。其中 AI 生成圖片的進展讓人驚艷到無以附加,幾乎無法用肉眼分辨真假。只要對 AI 引擎稍加訓練,下出精確的指令,就能讓 AI 做出大師風格的超高質圖像作品。 而這些 AI 生成的圖片,很重要的一點是其著作權歸屬,在法律上可能被視為機器創作,從而不受著作權保護。那麼在有辦法明確訂立相關法律條文之前,AI 圖片其實非常接近 CC0 圖片規範。且就算將來 AI 圖片能界定著作權,最多也只能限定在特定藝術家風格的作品,決大多數九成以上仍會類似 CC0 圖片。 本篇整理了幾個著名的 AI 生成圖庫,並收錄在「CC0 免費圖庫搜尋引擎」,方便使用者在同一個網站,就能同時搜尋這些圖庫的圖片。

一、AI 圖庫介紹

1. OpenArtopenart-1.jpg-AI 生成圖庫精選﹍CC0 免費圖庫的新選擇
  • 官方網站:OpenArt
  • 收藏量超過 1000 萬,最大的 AI 生成圖庫,以英文搜尋為主,AI 引擎主要為 Stable Diffusion、DALL·E 2。
  • 圖片由用戶直接上傳,網站也提供多項服務,讓使用者線上製作 AI 圖片、訓練 AI 引擎,並能編輯圖片
  • CC0 免費圖庫搜尋引擎:OpenArt
2. Lexicalexica-1.jpg-AI 生成圖庫精選﹍CC0 免費圖庫的新選擇
  • 官方網站:Lexica
  • 收藏量極大的 AI 生成圖庫,以英文搜尋為主,AI 引擎主要為 Lexica Aperture、Stable Diffusion。
  • 除了搜尋的現成 AI 生成圖片,使用者也能線上製作 AI 圖片。但未付費的話,有一些限制,例如每月圖片限量、圖片只能個人使用。
  • 如要商用的話請注意,此網站必須付費,圖片才能商用
  • 更多此圖庫的介紹可參考這篇「Lexica 人工智慧圖片搜尋引擎」。
  • CC0 免費圖庫搜尋引擎:Lexica
3. PromptHeroprompt-hero-1.jpg-AI 生成圖庫精選﹍CC0 免費圖庫的新選擇
  • 官方網站:PromptHero
  • 索引量中等的 CC0 圖庫,以英文搜尋為主。
  • 可以針對不同的 AI 圖片生成引擎進行搜尋,例如「Stable Diffusion」、「Midjourney」、「DALL-E」
  • 此圖庫的導覽選單也針對不同類型的圖片進行分類,例如 Portraits、Photography、Anime、Fashion...等風格。
  • 目前唯一有中文版本的 AI 圖庫,請前往官網搜尋:Prompt Heroes
  • CC0 免費圖庫搜尋引擎:PromptHero
4. ArtHubarthub-ai-1.jpg-AI 生成圖庫精選﹍CC0 免費圖庫的新選擇
  • 官方網站:ArtHub.ai
  • 索引量中等的 CC0 圖庫,以英文搜尋為主。
  • 主要由頂尖藝術家和設計師風格所生成的 AI 圖片。
  • CC0 免費圖庫搜尋引擎:ArtHub

二、AI 圖庫收錄條件

1. 能被 Google 索引其實 AI 圖庫還有很多,不只以上這幾個,然而要能被「CC0 免費圖庫搜尋引擎」收錄的話,必要條件為,圖片需要能被 Google 索引,然後才能呼叫 Google 相關的 API 進行搜尋。 本篇介紹的 AI 圖庫,都是 Google 索引狀態良好,足以做成線上搜尋引擎來使用。其他的 AI 圖庫,將來若被 Google 索引數量達一定水準,也會再收錄進來。 2. 其他 AI 圖庫以下列出一些不錯的 AI 圖庫,雖然 Google 索引狀況不佳,但可直接前往官網進行搜尋:

三、商用注意事項

CC0 圖片雖然允許商業使用,但並非所有情況都能商用,詳細原因請參考這篇「CC0 圖片商業使用注意事項」。 本篇介紹的 AI 圖庫中,只有「Lexica」明確指出,付費使用者才能進行商用,其他圖庫都沒有提到相關限制。 然而 AI 生成圖片跟 CC0 的狀況一樣,即便能商用,也不代表可以無限制、任何情境都直接拿去商業獲利。因此除了詳讀「CC0 圖片商業使用注意事項」這篇文章,最重要的還是重申這幾點:
  • 既然要商用,代表有獲利,那麼必須撥一部份預算聘請法務人員、或諮詢法律專家。
  • 如果覺得聘請或諮詢法務的費用太高,那我會建議直接付費購買圖庫,除了費用比較少,也可省下溝通法律事務的時間。
更多「免費圖庫」相關文章:

2023 免費素材圖庫整理

$
0
0
Pixabay.jpg-2023 免費素材圖庫整理ICON 免費素材搜尋引擎」今年 2023 進行大改版,同時也去蕪存菁,重新整理所有熱門免費素材圖庫,本篇會依照類別,重點介紹收錄的圖庫。

一、CC0 素材

1. PixabayPixabay.jpg-2023 免費素材圖庫整理
  • 官方網站:Pixabay 向量素材Pixabay 插畫素材
  • 收藏量巨大的 CC0 素材圖庫,可以搜尋中文,也有中文語系操作介面。
  • 可搜尋向量、插畫素材,也可搜尋英文,下載圖片可選擇尺寸。
  • 免費素材搜尋引擎:Pixabay
2. PublicDomainVectorsPublicDomainVectors.jpg-2023 免費素材圖庫整理
  • 官方網站:PublicDomainVectors
  • 收藏量巨大的 CC0 素材圖庫(public domain),可搜尋向量素材,英文介面。
  • 可依副檔名搜尋,有線上編輯圖片功能。
  • 免費素材搜尋引擎:PublicDomainVectors
3. IllustACIllustAC.jpg-2023 免費素材圖庫整理
  • 官方網站:IllustAC
  • 收藏量大的 CC0 素材圖庫,有中文語系操作介面。可搜尋向量、插畫素材。
  • 提供以圖搜圖功能,進階搜尋選項豐富,下載需要註冊。
  • 免費素材搜尋引擎:IllustAC
4. SilhouetteACSilhouetteAC.jpg-2023 免費素材圖庫整理
  • 官方網站:SilhouetteAC
  • 收藏量普通的 CC0 素材圖庫,有中文語系操作介面,可搜尋插畫素材。
  • 提供以圖搜圖功能,有進階搜尋選項,下載需要註冊。
  • 免費素材搜尋引擎:SilhouetteAC
5. OpenClipartOpenClipart.jpg-2023 免費素材圖庫整理
  • 官方網站:OpenClipart
  • 收藏量中等的 CC0 素材圖庫,英文介面,可搜尋向量素材。
  • 免費素材搜尋引擎:OpenClipart

二、圖示

1. FlatIconFlatIcon.png-2023 免費素材圖庫整理
  • 官方網站:FlatIcon
  • 收藏量巨大的素材圖庫,可搜尋圖示素材,英文介面。
  • 下載時可選擇尺寸,需要註冊。
  • 免費素材搜尋引擎:FlatIcon
2. IconArchiveIconArchive.jpg-2023 免費素材圖庫整理
  • 官方網站:IconArchive
  • 收藏量大的素材圖庫,可搜尋圖示、透明圖素材,英文介面。
  • 下載時可選擇尺寸、圖檔格式、不同平台。
  • 免費素材搜尋引擎:IconArchive
3. EasyIconEasyIcon.jpg-2023 免費素材圖庫整理
  • 官方網站:EasyIcon
  • 有中文語系操作介面,可搜尋圖示素材。
  • 進階搜尋選項豐富(依熱門程度、顏色、尺寸等)。
  • 免費素材搜尋引擎:EasyIcon
4. Icons8Icons8.jpg-2023 免費素材圖庫整理
  • 官方網站:Icons8 圖示Icons8 插畫
  • 收藏量大的素材圖庫,可搜尋圖示、插畫素材,英文介面。
  • 可線上編輯圖片。
  • 免費素材搜尋引擎:Icons8
5. IconFinderIconFinder.jpg-2023 免費素材圖庫整理
  • 官方網站:IconFinder
  • 可搜尋圖示、插畫素材,英文介面。
  • 此圖庫混合收費圖片,所以搜尋時必須勾選「Free」來篩選免費圖片
  • 免費素材搜尋引擎:IconFinder
6. IconScoutIconScout.jpg-2023 免費素材圖庫整理
  • 官方網站:IconScout 圖示IconScout 插畫
  • 收藏量巨大的素材圖庫,可搜尋圖示、插畫素材,英文介面。
  • 此圖庫混合收費圖片,所以搜尋時必須勾選「Free」來篩選免費圖片
  • 免費素材搜尋引擎:IconScout

三、向量

1. FreePikFreePik.jpg-2023 免費素材圖庫整理
  • 官方網站:FreePik 圖示FreePik 向量
  • 收藏量巨大的素材圖庫,可搜尋圖示、向量素材,英文介面。
  • 進階搜尋選項豐富(依類別、顏色、圖片方向等)。
  • 免費素材搜尋引擎:FreePik
2. Vector4FreeVector4Free.jpg-2023 免費素材圖庫整理
  • 官方網站:Vector4Free
  • 收藏量中等的素材圖庫,可搜尋向量素材,英文介面。
  • 免費素材搜尋引擎:Vector4Free
3. VectorPortalVectorPortal.jpg-2023 免費素材圖庫整理
  • 官方網站:VectorPortal
  • 收藏量中等的素材圖庫,可搜尋向量、插畫素材,英文介面。
  • 免費素材搜尋引擎:VectorPortal
4. FreeImagesFreeImages.jpg-2023 免費素材圖庫整理5. VecteezyVecteezy.jpg-2023 免費素材圖庫整理
  • 官方網站:Vecteezy
  • 可搜尋向量、透明圖素材,英文介面。
  • 免費素材搜尋引擎:Vecteezy

四、透明圖

1. PngTreePngTree.jpg-2023 免費素材圖庫整理
  • 官方網站:PngTree
  • 收藏量巨大的素材圖庫,有中文語系操作介面,可搜尋透明圖、插畫、背景圖素材。
  • 下載時需加入會員(FB、Google、Line)。
  • 免費素材搜尋引擎:
2. Png MartPng-Mart.jpg-2023 免費素材圖庫整理
  • 官方網站:Png Mart
  • 收藏量大的素材圖庫,可搜尋透明圖素材,英文介面。
  • 免費素材搜尋引擎:Png Mart
3. StickPngStickPng.jpg-2023 免費素材圖庫整理
  • 官方網站:StickPng
  • 收藏量大的素材圖庫,可搜尋透明圖素材,英文介面。
  • 免費素材搜尋引擎:StickPng
4. PngImgPngImg.jpg-2023 免費素材圖庫整理
  • 官方網站:PngImg
  • 收藏量大的素材圖庫,可搜尋透明圖素材,英文介面。
  • 圖片可依英文字母A~Z分類。
  • 免費素材搜尋引擎:PngImg

五、免費素材使用條款

「免費素材圖庫」跟「CC0 圖庫」的使用方式、條款截然不同,「CC0 圖庫」可以任意使用、甚至商用,但「免費素材圖庫」則有所限制,例如:
  • 有的限制只能個人使用,不得商業使用
  • 有的必須在圖片、或網站上署名作者或圖庫
  • 有的直接標示 CC 授權,需以相同方式分享
  • 但也有的允許商業使用
所以下載免費素材圖片之前,除了 CC0 圖片之外,請務必在下載頁面的圖片描述找找,看看授權使用條款如何規範,以免不小心侵權。
更多「免費圖庫」相關文章:

FB 社團爬蟲實作範例﹍使用 Node.js 操作 Puppeteer

$
0
0
過去取得 Facebook 社團貼文的方法為「訂閱FB社團通知郵件」,然後利用 Gmail 設定關鍵字篩選,挑出真正需要的貼文內容,整個優化流程記錄在「操作 Google Apps Script 定時過濾 FB 社團郵件通知」。 不過這套流程最近碰了壁,不知為何 Facebook 不再寄出郵件通知,持續了好一段時間,而且只有某個 FB 帳號收不到郵件通知,我的 FB 主帳號仍可收到社團貼文通知。合理推測為,可能那個 FB 帳號有太多社團郵件通知(主帳號不多),FB 郵件伺服器覺得耗費太多資源,決定封鎖該帳號的郵件通知功能。 既然 Facebook 自己提供的功能也靠不住,只好自己研究寫爬蟲抓 FB 社團貼文的方法。本篇會分享利用 Node.js 操作 Puppeteer,模擬 Chrome 瀏覽器開啟 FB 社團網頁並爬文的範例筆記,以及相關的注意要點。 (圖片出處: piqsels.com)

一、FB 爬蟲注意事項

1. FB 適合爬蟲的網址對於新手而言,FB 網頁版(www.facebook.com)由於常常改版,寫好的爬蟲程式可能過陣子就不能用了。根據這個「FB 爬蟲討論串」,推薦的 FB 爬蟲網址如下:
  • m.facebook.com:此為 FB 行動版網址
  • mbasic.facebook.com:此為 FB 簡易版網址,頁面沒有 Javascript,環境非常單純,是爬蟲程式首選
2. 面對反爬蟲機制 FB 爬蟲登入帳號、或是存取頁面太過頻繁,很快就會被封鎖帳號,所以需要注意以下:
  • 不要使用主帳號作為爬蟲
  • 頁面存取要設定間隔一段時間,例如隨機 5~10 秒以上,避免被 FB 偵測到固定行動模式
  • 別做看似浪費 FB 資源的事
3. 排序問題 FB 社團貼文預設排序方式,並非顯示最新貼文。要解決貼文排序問題的話,可參考以下:
  • FB 網頁版:社團網址加上參數 "?sorting_setting=CHRONOLOGICAL"即可依照貼文發佈時間排序
  • FB 行動版:點擊右上角選單圖示(三條橫線) → 最新動態 → 社團,就可看到所有社團貼文依照發佈時間排序
  • FB 簡易版:沒有提供排序的方法

二、Node.js 準備動作

1. Node.js 環境設定使用 Node.js 的初始環境建構,可參考以下: 2. Puppeteer使用 Puppeteer 作為 FB 社團爬蟲程式有以下優點,是一般簡易爬蟲程式做不到的:
  • 能模擬 Chrome 瀏覽器的操作,讀取 JS 載入後的頁面 HTML 內容
  • 能模擬 FB 輸入帳號密碼的動作,解決帳號登入、網頁讀取 cookie 的問題
更多 Puppeteer 的介紹、安裝、操作,可參考這篇「爬蟲好工具 - Puppeteer」,API 說明書可參考「Puppeteer」。 3. 寫入資料庫爬完的資料,如果想寫入 Google 試算表作為資料庫,可參考「使用 Node.js 操作 Google Sheets API 讀寫試算表資料庫 」。

三、範例程式碼

以下為簡易的 FB 社團爬蟲範例程式碼,以「Blogger 經營學習資源分享」這個社團作例子,抓 10 篇貼文的內容及貼文網址。 程式碼代表的含意請參考註解文字,並請修改前幾個參數的數值(及帳號密碼等),因為只是能正常執行的簡單範例,需要更多功能請自行修改程式碼: const fbGroupId = "blogger.skill", // FB 社團 ID(為網址上的一串數字), 或社團自訂網址字串 fbHomeUrl = "https://mbasic.facebook.com", // FB 簡易版網址 fbUsername = "xxx@gmail.com", // FB 帳號 fbPassword = "xxxxx", // FB 密碼 maxPosts = 10, // 最多抓幾篇文章 cheerio = require("cheerio"), puppeteer = require("puppeteer"); (async function() { let fbPostsArrays = []; // 存放所有 FB 社團貼文 let browser, page; // FB 初步動作 await fbInit(); // 抓 FB 社團貼文 await getFbGroupPosts(); console.log(fbPostsArrays); // 顯示爬文資料 // 關閉瀏覽器 await browser.close(); // FB 初步動作 async function fbInit() { // 開啟瀏覽器 browser = await puppeteer.launch(); page = await browser.newPage(); // 載入 FB 首頁 await page.goto(fbHomeUrl); // 登入 FB await loginFB(page, fbUsername, fbPassword); } // 登入 FB async function loginFB(page, username, password) { await page.waitForSelector("#m_login_email"); await page.type("#m_login_email", username); await page.waitForSelector("#password_input_with_placeholder"); await page.type("#password_input_with_placeholder input", password); await page.waitForSelector("#login_form"); await page.click("#login_form input[name=login]"); } // 抓 FB 社團貼文 async function getFbGroupPosts() { let fbGroupUrl = fbHomeUrl + "/groups/" + fbGroupId; let postCount = 0; // 已抓取的貼文數量 // 載入 FB 社團首頁 await page.goto(fbGroupUrl); // 取得單一頁面貼文 await getSinglePagePosts(); // 取得單一頁面貼文 async function getSinglePagePosts() { let nextPageUrl; // 下一頁連結 // 取得單一頁面所有貼文 await getSinglePagePosts(); // 貼文數量不到 maxPosts 則持續爬取 while (maxPosts > postCount) { // 休息 10 秒 sleep(10); // 前往下一頁 await page.goto(nextPageUrl); // 繼續抓下一頁 await getSinglePagePosts(); } // 取得單一頁面所有貼文 async function getSinglePagePosts() { // 等待頁面載入 #m_group_stories_container await page.waitForSelector("#m_group_stories_container"); //把網頁的body抓出來 let body = await page.content(); //丟給cheerio去處理 let $ = cheerio.load(body); let $section = $("#m_group_stories_container section"); let $posts = $section.children("article"); let $nextPage = $section.next().children("a"); nextPageUrl = fbHomeUrl + $nextPage.attr("href"); // 下一頁連結 // loop 所有貼文 loopAllPosts(); function loopAllPosts() { // 取得網址 內容 $posts.each(function() { // 檢查貼文數量是否已達到 maxPosts if (maxPosts < postCount){ return false; } let $this = $(this); let $header = $this.find("header:eq(0)"); let $footer = $this.children("footer"); let postUrl = getPostUrl($footer); // 取得貼文連結 let body = $header.next().text(); // 取得貼文內容 fbPostsArrays.push([postUrl, body]); postCount++; // 紀錄已爬取貼文數 }); } // 取得貼文連結 function getPostUrl($footer) { let postUrl; $footer.find("a").each(function() { let $this = $(this); if ($this.text() == "完整動態") { postUrl = $this.attr("href").split("?")[0]; postUrl = postUrl.replace("mbasic.", ""); return false; // 中止 loop } }); return postUrl; } } } } // 休息 n 秒 function sleep(sec) { var sharedArrayBuffer = new SharedArrayBuffer(4), sharedArray = new Int32Array(sharedArrayBuffer); Atomics.wait(sharedArray, 0, 0, sec * 1000); } })();執行後的結果如下: [ [ 'https://facebook.com/groups/blogger.skill/permalink/1289039078370664/', '[標籤選擇的問題] 因為 blogger 沒有把分類跟標籤拆開,撰文上原本把標籤當分類用,但因為覺得多一點標籤可以有利SEO(?),所以就標了一堆,但回到前台後就變得凌亂。 想說是有什麼方式可以指定只呈現要的標籤即可?' ], [ 'https://facebook.com/groups/blogger.skill/permalink/1291575704783668/', '上面的圖是我找到的模板,但YT嵌入碼貼上後,高度被限制到很窄,同樣的YT預設的嵌入碼,在下面的圖中觀賞上比較舒適,HTML裡面找了很多但還是無解,因此來請教高手求解方' ], [ 'https://facebook.com/groups/blogger.skill/permalink/1290236434917595/', '製作網頁如果需要用到一些素材、插圖時,可以使用「免費素材搜尋引擎」,一站直接搜尋所有熱門圖庫:https://icon.wfublog.com/ ­ 同時本篇也介紹這些免費素材圖庫,依照CC0、圖示、向量、透明圖等類別進行重點說明:https://www.wfublog.com/2023/06/free-icon-vector-image-stock.html' ], [ 'https://facebook.com/groups/blogger.skill/permalink/1258260454781860/', '最近因為要在文章裡插入表格,研究了一下方法,想將測試的結果回饋給社團,就把過程整理成文章,若有誤還請各位高手指點,謝謝。' ], ... ]
更多 NodeJs 相關文章:

排程自動抓台幣美元匯率成交量資料﹍Google Apps Script

$
0
0
上一篇說明「如何排程抓證交所台股交易資料」,本篇同樣利用 Google 試算表作為資料庫,使用 Google Apps Script(以下簡稱 GAS)進行排程及寫程式,來抓取「美元/台幣」匯率交易資料,用以觀察長期趨勢,尋找合適的買賣點。 (圖片出處: pexels.com)

一、公開資訊來源

1. 臺灣期貨交易所 API這是期交所 API 網址: 往下找到「每日外幣參考匯率」即可看到 API 呼叫網址:
  • https://openapi.taifex.com.tw/v1/DailyForeignExchangeRates
操作的方式可參考上一篇「如何排程抓證交所台股交易資料」→「一、證交所 API」→「1. 新版 API」,有圖解範例說明。 2. 台北外匯市場發展基金會「台北外匯市場發展基金會」提供了 1990 年以來的每日外匯成交資料,且包含「成交量」紀錄,這是前面「期交所 API」無法提供的。 進入以下頁面後,可下載每一年的 csv 檔紀錄: 如果不需要成交量的話,可以使用「期交所 API」;如果需要成交量,就得瞭解如何抓 csv 檔後進行解析。

二、GAS 解析 CSV 檔

1. 官方工具參考 GAS 官網說明書「parseCsv」,使用以下工具可解析 CSV 檔內容: Utilities.parseCsv("csv 檔內容")以上指令會將 csv 檔內容解析並回傳二維陣列資料,例如原本的 csv 內容為: 名稱, 性別, 編號 Wayne, Male, 001解析後回傳: [ [名稱, 性別, 編號], [Wayne, Male, 001], ]2. 操作範例這篇「How to fetch and parse a CSV in Google Apps Script」提供了實作範例: function myFunc(){ var res = UrlFetchApp.fetch('http://www.example.com/my.csv') var csvraw = res.getContentText() var csv = Utilities.parseCsv(csvraw) } csv 即為回傳的二維陣列內容。

三、取得歷史外匯資料範例

以下為 GAS 範例程式碼: var ss = SpreadsheetApp.getActiveSpreadsheet(), fx_sheet = ss.getSheetByName("匯率"); // 取得匯率歷史價量資料 function getFxHistory() { var startYear = 1989, endYear = 2023, apiUrl = "https://www.tpefx.com.tw/uploads/service/tw/", // api 呼叫網址 fetchUrl, i, j, response, data, date, rate, volume, rowData, lastRow; // loop 年份 for (i = startYear; i < endYear; i++) { fetchUrl = apiUrl + i + "nt.csv"; // 組合 api 參數 response = UrlFetchApp.fetch(fetchUrl).getContentText(); data = Utilities.parseCsv(response); // 去除 row 1 「欄位名稱」資料 data.shift(); rowData = []; // loop 所有資料 for (j in data) { date = data[j][0]; // 沒有日期不處理 if (!date) { continue; } rate = data[j][2]; // 匯率 volume = data[j][5]; // 成交量 rowData.push([date, rate, volume]); } // 寫入試算表 lastRow = fx_sheet.getLastRow(); fx_sheet.getRange(lastRow + 1, 1, rowData.length, 3).setValues(rowData); // 休息 Utilities.sleep(5000); } }

四、取得每日外匯資料範例

1. GAS 範例想要每日取得最新外匯成交資料的話,由於收盤時間為 16:00,最好 17:00 以後再設定排程執行程式。 以下為操作「期交所 API」的範例程式碼: var ss = SpreadsheetApp.getActiveSpreadsheet(), fx_sheet = ss.getSheetByName("匯率"), today = new Date(), todayFormat = Utilities.formatDate(today, "GMT+8", "yyyyMMdd"); // 格式化今天日期 // 取得匯率歷史價量資料 function getFxToday() { var apiUrl = "https://openapi.taifex.com.tw/v1/DailyForeignExchangeRates", // api 呼叫網址 response = UrlFetchApp.fetch(apiUrl).getContentText(), data = JSON.parse(response), i, j, rowData, date, rate; // loop data for (i in data) { rowData = data[i]; // loop 每日資料 for (j in rowData) { date = rowData[j]["Date"]; // 今日才處理 if (date == todayFormat) { rate = rowData[j]["USD/NTD"]; // 美元台幣匯率 fx_sheet.appendRow([date, rate]); } } } }2. 注意事項奇怪的是,「期交所 API」我在 GAS 執行時,總是回傳 404 錯誤,不曉得是否有人頻繁用 GAS 呼叫「期交所 API」,導致 GAS 伺服器 IP 被期交所伺服器封鎖。 然而我改用 Node.js 呼叫「期交所 API」就沒有任何問題,所以如果以上程式碼你也遇上 404 錯誤的話,可以參考「使用 Node.js 爬蟲定期抓網頁資料,結合 Google 試算表作為資料庫」,改用 Node.js 的環境來修改程式碼,進行爬蟲排程抓資料。

五、補充

本篇操作寫得比較簡略,如有疑問可先閱讀上一篇「如何排程抓證交所台股交易資料」的內容,來瞭解以下如何操作:
  • Google 試算表察看資料
  • GAS 設定排程
  • 自動寄信通知
更多 Google Apps Script 相關文章:

協助 WordPress.org 搬家到 Blogger 紀錄﹍如何繞過 WP 主機商

$
0
0
wp-move-to-blogger.jpg-協助 WordPress.org 搬家到 Blogger 紀錄﹍如何繞過 WP 主機商過去曾協助「自架站搬到 Blogger」、「WP.com 搬到 Blogger」,但奇怪的是,最大宗的 WP 主機商反而還沒有成功案例。然而並非沒有這類站長想搬到 Blogger,實情是,這類找上本站協助搬家的案例比「自架站」+「WP.com」還多,但最後為何都沒有成案呢? 主要的難度在於 301 轉址,為了搬家後 SEO 能順利移轉到 Blogger 網站,必須提供主機 FTP 權限才能進行 301 轉址設定。然而我請客戶跟 WP 主機商索取 FTP 帳號密碼後,就會發生以下情形:
  • 有些站長似乎怕被 WP 主機商知道要搬家,不斷詢問有沒有辦法不讓主機商發覺就直接搬走。後來該站長瞭解 301 轉址的困難處後,知道不跟主機商聯繫不太可能,就沒了消息。
  • 部分站長有答應跟 WP 主機商索取 FTP 權限,但之後也是沒了音訊。猜測這情形就類似 Godaddy,一跟他們說不續約,就會提供很優惠的續約價。畢竟 WP 主機商不會願意長期飯票離開,相信都會有一套話術來挽留客人。
直到最近有 WP 站長表示,主機商一年費用跟以前比,漲了 2 倍以上不堪負荷,想搬到 Blogger,且成功索取了 FTP 權限。有了實測環境後,本篇也順帶分享不靠 FTP、不必跟主機商斡旋,就能直接將 WP.org 搬到 Blogger 的方法,當然 SEO 也能順利移轉過來。 有此搬家需求的站長,可用文末的聯絡表單與本站聯繫。 (圖片出處: unsplash.com)

一、WP 後台權限

如果沒有 FTP 權限來設定 301 轉址的話,至少需要 WP 後台安裝外掛的權限,或是編輯系統佈景(Theme)檔案的權限,才能設定 301 轉址。然而主機商如果不想客戶離開,除了不提供 FTP 權限,同樣也會封鎖後台「安裝外掛」、「編輯佈景檔案」的權限,以下來看實例。 1. 安裝外掛權限根據 WP 官網文件「Manage Plugins」,WP 後台「外掛功能」介面如下: wp-move-to-blogger-1.jpg-協助 WordPress.org 搬家到 Blogger 紀錄﹍如何繞過 WP 主機商
  • A:這裡有「新增外掛」(Add New)按鈕
  • B:上方有各種熱門外掛推薦分頁可切換
  • C:右上方可以搜尋所有 WP 外掛
這是我的客戶 WP 後台外掛功能,被主機商裁減後的介面: wp-move-to-blogger-2.jpg-協助 WordPress.org 搬家到 Blogger 紀錄﹍如何繞過 WP 主機商
  • 無「新增外掛」按鈕
  • 只能看到現有外掛,看不到熱門推薦外掛
  • 只能搜尋現有外掛,不能搜尋所有 WP 外掛。
總之,就是不給裝外掛的意思。 2. 編輯佈景檔案權限根據 WP 官網文件「Appearance Menus Screen」,WP 後台「外觀」(Appearance)介面如下: wp-move-to-blogger-3.jpg-協助 WordPress.org 搬家到 Blogger 紀錄﹍如何繞過 WP 主機商如上圖紅框處,有個「佈景編輯器」(Theme Editor)的按鈕。點擊此按鈕後,根據 WP 官網文件「Appearance Theme File Editor Screen」,會出現以下畫面: wp-move-to-blogger-4.jpg-協助 WordPress.org 搬家到 Blogger 紀錄﹍如何繞過 WP 主機商這個介面可以編輯所有佈景檔案、各種後端 php 檔,例如 functions.php、header.php 等等,就可以在後端設定 301 轉址了。 而我的客戶 WP 後台「外觀」介面如下: wp-move-to-blogger-5.png-協助 WordPress.org 搬家到 Blogger 紀錄﹍如何繞過 WP 主機商「佈景編輯器」被移除,自然動不了後端設定了。

二、WP 搬家如何繞過主機商

失去後端功能的 WP,既然只能操作前端,聽起來像是主機商自己開發的一個國產部落格平台(如痞客邦、Xuite),但還要負擔龐大的主機費、流量費,是否值得就給站長自行評估了。 以下說明在無法動到後端的情況下,我會如何進行搬家,移轉 SEO 權重。 1. WP 製作搬家畫面無法 301 移轉網址的情況下,可以視為一般部落格的搬家法,參考「痞客邦搬家到 Blogger 後,SEO 問題要如何解決? 」→「四、痞客邦的處置」:
  • 在 WP 每篇文章開頭處,都插入製作好的「搬家畫面」,讓訪客點擊前往對應的 Blogger 網址
  • 文章內容只留前幾行,才不會讓 Blogger 的文章成為重複內容。
經過約 6 個月的時間,原 WP 網站的 SEO 權重,就會逐漸移轉到 Blogger 網站。 2. 保留主機使用期限因為 SEO 移轉至少需 6 個月以上,所以需確保主機商的合約有足夠的時間。如果不夠的話,只好先續約一年,畢竟如果重視 SEO 的話不得不如此。 當然,如果有辦法取得 FTP 帳號密碼,就不需要這麼麻煩了,直接 301 轉址即可,SEO 權重可以立即移轉。 3. 修改文章內容製作搬家畫面需要批次修改文章內容,手動一篇篇改只有在文章數很少的情況下才有可能。 要做到此點,可以操作 WP 官方提供的 API,完全不需求助主機商,自己用程式執行就能跑完所有文章。

三、搬文章

這次搬 WP 文章遇到比較大的狀況,所以特別記錄一下。 1. 線上轉檔工具 WP 後台可以匯出 xml 檔,但格式與 Blogger 不相容,以往都是靠下面這個網頁的服務轉檔: 進行轉檔時,一方面會顯示錯誤訊息,說檔案太大,必須切割成小於 1MB 的檔案。另一方面我若找個小檔案測試,網站又會呈現當掉的狀態,不曉得是否作者沒有在維護了? 也許以前沒遇到問題,是因為搬的文章數比較少,而這次搬的文章數非常多。但切成一大堆小檔也很麻煩,還是另外找個一勞永逸的解決方案比較好。 2. WP 外掛由於有了 FTP 權限,我找到一個可以轉換匯出檔的 WP 外掛,利用 FTP 安裝到後台: 經測試後,的確可以成功轉檔,並匯入 Blogger,但卻發現一個嚴重問題 → 這個外掛並沒有匯出「留言」,只有匯出文章及分類(也就是 Blogger 的標籤),如此一來,該外掛也不是個完美的解決方案。 3. 自行轉換格式由於多年來協助各種部落格平台搬家到 Blogger,我對 Blogger 匯入檔的格式、編碼等等還是相當瞭解的,所以決定自行研究轉換格式:
  • 比對 WP 後台匯出檔的文章、留言、分類、草稿等等格式與編碼
  • 轉換為 Blogger 匯入檔對應的格式與編碼
最後總算生成可以成功匯入 Blogger 的檔案。

四、搬其他項目

其他的搬家項目,大致有這些:
  • 搬圖片
  • 更換新舊文章連結
  • 搬人氣
  • 301 轉址或搬家畫面
以上這些項目都需要用程式處理,如果文章數不多的話,某些可手動自行處理。 如果需要瞭解以上這些項目的含意,可參考「協助痞客邦搬家到 Blogger 流程紀錄」→「四、本站處理項目」,有比較詳細的說明。

五、聯絡表單

如果有預算需處理 WP 搬家到 Blogger 事宜,請告知要搬家的項目有哪些:
  • 搬文章
  • 搬圖片
  • 處理新舊文章連結
  • 搬人氣
  • 301 轉址或搬家畫面
以及告知以下資訊:
  • 您的網址
  • 文章篇數
並用以下表單與本站聯繫:
稱呼:(必填)
電子郵件:(必填)
您的網址或提問的相關網址:(必填)
簡單自介、如何找到本站:(必填)
請詳細描述您的需求、問題或意見,如提供的資訊不足,可能無法回覆:(必填)
更多 WordPress 相關文章:

Win7 如何自動校正系統時間

$
0
0
windows-auto-update-system-time.jpg-Windows 如何自動校正系統時間買了多年的 Intel NUC 準系統,Windows 7 最近開機後系統時間總是自動回到 2009 年,除了 Chrome 瀏覽器不給上網,會報錯提示系統時間錯誤,還有一些其他程式也會因為系統時間偏差而無法正常執行。 根據多年經驗,這是主機板電池沒電的狀況,換一顆 CR2032 電池就解決了。然而辛苦拆解準系統後才發現,Intel NUC 做了個特規 CR2032 電池,無法自行更換電池。根據官網「Intel® NUC 上的 CMOS 電池」圖片,電池組件長得如下圖: windows-auto-update-system-time-1.jpg-Windows 如何自動校正系統時間這個電池組件使用一條 2 pin 連接線插到主機板,剝開包覆的膠帶後發現,組件的設計不讓使用者自行替換電池,導致只能想辦法買完整的電池組件替換。然而前面的官網文件也說明了,這整組零件不零賣,要自行上網找 "線上零售商"購買... 想到要大老遠跑光華商場找電子零件就很麻煩,而上網買除了運費會是零件的好幾倍,也不知是否插上 Intel NUC 就能跑,解決硬體問題的時間不如想辦法解決軟體問題比較快,如果我能讓 Windows 開機後自動校正系統時間,就可以無視主機板電池沒電的問題了。 (圖片出處: pexels.com)

一、原理說明

1. 最方便的作法網路上爬了相當多文章,有些是內容很專業、原理說明得很詳細,可惜我除了看得頭昏眼花,也測不出效果。直到這一篇內容及步驟都相當簡短的文章,才測試成功: 這篇主要需進行 3 個動作:
  • 製作 .bat 批次檔
  • 修改 Windows 登錄檔
  • 建立工作排程器
2. bat 批次檔內容內容只有兩行,說明如下: net start "windows time"→ 這一行會強制啟用系統服務 "windows time" w32tm /resync → 進行時間校正windows-auto-update-system-time-2.jpg-Windows 如何自動校正系統時間檔案總管 → 電腦 → 右鍵選「管理」→ 服務與應用程式 → 服務,可看到上圖畫面,紅框處即為 "Windows Time"服務,啟用後方可允許系統時間校正。 如果沒有上述 bat 檔第一行,就逕自執行第二行,有可能無法進行時間校正(有第一行可確保這個系統服務被啟用)。 3. 其他補充
  • 「修改 Windows 登錄檔」這個動作非常必要,如同原文說明,Windows 預設在系統時間差距太大時,例如正負差距 15 個小時以上,不允許進行時間校正,所以將登錄檔中的預設值 15 小時修改掉
  • 「建立工作排程器」這部分的流程比較麻煩且容易出錯,主要目的為讓開機後自動執行 bat 檔,其實有更簡單的作法,請見後面優化流程。

二、優化版流程

因為部分操作流程還可以更簡化,下面會提供我的優化版本。 1. 製作 bat 批次檔net start "windows time" w32tm /resync將以上內容存成 bat 檔即可。 2. Windows 登錄檔修改 Windows 登錄檔內容比較麻煩,我已製作下面這個 reg 登錄檔,下載後執行即可: 3. 開機自動執行windows-auto-update-system-time-3.jpg-Windows 如何自動校正系統時間只要將前面製作的 bat 批次檔放到 Windows「啟動」資料夾,開機就會自動執行:
  • Win + R→ 輸入 shell:Startup
  • 出現的資料夾就是 Windows「啟動」資料夾
4. 工作排程補充如果習慣使用 Windows 內建的「工作排程」,原文的操作流程,觸發條件設定為「開機啟動」,但實測結果如下:
  • 觸發條件設定為「啟動時」,那麼開機時並不會執行
  • 必須將觸發條件設定為「登入時」,開機才會執行
更多 Windows 相關文章:

徹底解決 Win 10 中英輸入法切換的各種問題(含微軟注音、酷音)

$
0
0
win10-chinese-english-input-switch.jpg-Win 10 解決中英輸入法切換的各種問題中文輸入自 Win 8 以後就是大災難,微軟官方從未根本解決問題。我在 Win 8 的解決方式可參考「讓 WIN8 能用 CTRL + SPACE 切換中英輸入」,主要解決這兩件事:
  • 預設輸入改為英數模式
  • 可按 Ctrl+Space切換中英輸入
由於微軟宣布不支援 Win 7,很多常用軟體也逐漸不支援 Win 7,不得已必須強迫自己適應 Win 10。然而正式使用 Win 10 後,發現狀況跟多年前 Win8/Win10 又不一樣了,得重新解決擾人的中英文輸入法切換問題。費了一番功夫總算解決各種狀況,請見本篇的心得整理。 (圖片出處: unsplash.com)

一、基本二訴求

先簡單說明一下,為何 Windows 輸入及切換要順暢、有效率,必須解決這基本的兩大訴求: 1. 預設輸入英數模式雖然我們使用的系統環境是中文,然而進入 windows 後,最先開始輸入的字元,卻不一定是中文。將預設字元改為英數的理由如下:
  • 進入系統後,第一個要輸入的字元,是中文的機率小於 50% 的話,就應該改為英數模式,才會是有效率的配置。
  • 使用瀏覽器常會輸入網址字串,必須是英數模式
  • 前端工作者、工程師等很多領域,會很常使用英數
當然,如果使用 Windows 以中文輸入為主的使用者,可忽略這個部分。 2. 按 Ctrl+Space 切換中英輸入古早年代 Windows 切換輸入法的快速鍵就是使用 Ctrl+Space,但 Win8 以後必須改用以下幾種組合鍵:
  • Shift:切換中英模式 → 缺點為很常誤按 Shift,導致要常常切來切去,非常不方便
  • Ctrl+Shift:切換同語言的輸入法 → 這個組合鍵很不好按,比較浪費時間
  • Win+Shift:切換不同語言的輸入法 → 這個組合鍵比 Ctrl+Shift稍微好按,但仍然沒 Ctrl+Space順暢
總之切換中英輸入法,還是 Ctrl+Space最省時間,且不會誤按。

二、微軟注音

首先以最多人使用的微軟注音來說明。 1. 預設英數模式如果只有一種輸入法「微軟注音」,沒安裝任何其他語系、輸入法時,狀況最為單純,只要按照以下流程,就能預設使用英數來輸入: win10-chinese-english-input-switch-1.jpg-Win 10 解決中英輸入法切換的各種問題 Windows 開始 → 設定 → 時間與語言 → 語言 → 繁體中文 → 選項 win10-chinese-english-input-switch-2.jpg-Win 10 解決中英輸入法切換的各種問題選擇「微軟注音」 → 選項 → 一般 → 預設輸入模式選擇「英數字元」即可 2. 按 Ctrl+Space 切換中英輸入只要按照以下流程,就能使用 Ctrl+Space 切換中英輸入: win10-chinese-english-input-switch-3.jpg-Win 10 解決中英輸入法切換的各種問題回到 Windows 開始 → 設定 → 裝置 → 輸入 → 進階鍵盤設定 win10-chinese-english-input-switch-4.jpg-Win 10 解決中英輸入法切換的各種問題輸入語言快速鍵 → 進階按鍵組合
  • 切換輸入語言:改成「無」,可取消按 Shift切換中英輸入
  • 繁體中文輸入法 - 啟用/停用輸入法切換:確認這裡設定的是 Ctrl+空格鍵即可
  • 這一點為補充,使用多種輸入法時,「讓我針對每個應用程式視窗使用不同輸入法」最好不要勾選,免得切換後亂跳
3. 其他預設輸入法除了微軟注音,Windows 預設還可新增這些輸入法:速成、大易、行列、倉頡。基本上要做到「預設英數模式」、「按 Ctrl+Space 切換中英輸入」,如果只使用一種輸入法,那麼參考前面微軟注音的設定流程即可。 4. 推薦使用酷音雖然這個章節講的是微軟注音,但如果你習慣用微軟注音的話,不如改用「酷音輸入法」,鍵盤排列方式不變(且選擇性更多),功能及操作的便利性則是酷音大勝,可參考「四、自行安裝輸入法(酷音)」。

三、安裝多種輸入法

前面說的是只有一種輸入法,以下說明安裝多種輸入法時,如何作到「基本二訴求」。 1. 預設英數模式假設主要中文輸入法是「微軟注音」:
  • 需要另外選一個輸入法作為英數模式,例如可以新增 Windows 預設的「Microsoft 速成」輸入法
  • 將「速成」輸入法的 "預設輸入模式"設定為 "英數字元"
  • 然後將「微軟注音」的 "預設輸入模式"設定為 "中文"
win10-chinese-english-input-switch-5.jpg-Win 10 解決中英輸入法切換的各種問題接著從 Windows 開始 → 設定 → 裝置 → 輸入 → 進階鍵盤設定,如上圖畫面:
  • 覆寫預設輸入法:選擇「速成」輸入法 → 如此預設就能進入英數模式
  • 切換輸入法:務必取消勾選「讓我針對每個應用程式視窗使用不同輸入法」,才能確保預設使用「速成」輸入法
完成以上設定後,除了預設可英數輸入,另外可使用組合鍵 Win+Space切換輸入法,接下來說明如何改成用 Ctrl+Space切換。 2. 按 Ctrl+Space 切換中英輸入首先須下載自訂鍵盤快速鍵的軟體,例如本篇舉例的 HotKeyz: 接著參考我之前寫的「讓 WIN8 / WIN10 能用 CTRL + SPACE 切換中英輸入」→「二、用 Hotkeyz 調整切換按鍵」,就能實現用 Ctrl+Space切換輸入法。

四、自行安裝輸入法(酷音)

除了 Windows 預設輸入法,如果使用自行安裝的輸入法,例如嘸蝦米輸入法,或是我為了許氏鍵盤所使用的酷音輸入法,作法可能都不太一樣,得視該軟體功能設計是否完善、照顧使用者體驗。 1. 酷音輸入法 Win10 最新版本下載網頁可前往 Github 官網:酷音輸入法 PIME最新版本叫出設定畫面時,會改用瀏覽器開啟,往下捲到底可看到一個非常重要的選項:
  • 預設以停用輸入法模式啟動(Windows 8 以上適用)
請勾選這個選項後套用,這麼做以後,就能滿足基本二訴求:
  • 預設輸入以英數模式開始
  • 也能使用 Windows 系統預設的 Ctrl+Space切換中英輸入
記住別安裝別的輸入法,保持只有一個酷音輸入法,就能在 Win10 爽快打字了。 2. 安裝兩個輸入法若安裝酷音以外的輸入法,如果軟體設計上不像酷音能夠「預設以停用輸入法模式啟動」,可能就需要安裝兩個輸入法,才能滿足基本二訴求。 作法原理可參照前面「三、安裝多種輸入法」的流程:
  • 新增「速成」輸入法,並預設英數輸入
  • 將自行安裝的輸入法預設為中文輸入(如果有這個設定的話)
  • 其他相關設定與自訂快速鍵的操作同樣即可

五、多種輸入法產生的問題

1. 微軟注音的問題補充一下安裝多種輸入法可能會產生的問題,一開始我的操作方式為:
  • 使用「微軟注音」作為英數輸入
  • 使用「酷音」作為中文輸入
有時輸入法切換後,再回到「微軟注音」就不是英數輸入了。 搜尋後也有人遇到同樣問題:「Windows 10 輸入法自動切換問題」,這位網友是在微軟社群發問,他觀察到「微軟注音」有個設定會 "雞婆"幫使用者自動切換,該設定的名稱叫做「智慧型輸入模式自動切換」,但我們並不知道他的判斷邏輯,導致我們想輸入英數時,偏偏「微軟注音」覺得我們想輸入中文,就自動切換為中文模式了。 該網頁有不少人回答,最終有找出修改該設定的方式,然而我測試了之後,找不到相關的設定,後來才知道是不同 Win10 版本的關係。 該網頁的狀況應該是 Win10 家用版,而 Win10 專業版不太一樣,可參考以下設定流程: win10-chinese-english-input-switch-6.jpg-Win 10 解決中英輸入法切換的各種問題 Windows 開始 → 設定 → 時間與語言 → 語言 → 繁體中文 → 選項 → 選擇「微軟注音」 → 選項 → 一般 捲到最底部後,可看到上圖畫面:
  • Win10 專業版沒有進階設定選項,難怪找不到「智慧型輸入模式自動切換」設定
  • 如上圖,選擇「開啟」舊版微軟注音,然後「開啟進階設定」,就可進行設定了
win10-chinese-english-input-switch-7.jpg-Win 10 解決中英輸入法切換的各種問題先在「一般」分頁,確定輸入模式有選擇「英數模式」 win10-chinese-english-input-switch-8.jpg-Win 10 解決中英輸入法切換的各種問題切換到「進階」分頁:
  • 按照前面「微軟社群討論串」的網頁進行修改即可
  • 取消按 Shift切換中英輸入的按鍵
  • 最重要的是將「輸入自動切換」改為「不使用」,就不會使用「智慧型輸入模式自動切換」了
2. 後續狀況按照前面的設定後,多種輸入法之間的切換比之前好很多,「微軟注音」比較不會被系統強制切換成中文輸入。 然而奇怪的是,這也非 100% 絕對,用久了有時還是會發生切換到「微軟注音」時,自動變成中文輸入的狀況,找不出確切的邏輯與規律。 我的結論大概是:
  • 預設英數輸入使用「微軟注音」似乎會有 bug,可以改用其他系統輸入法,例如本篇舉例的「速成」,比較不會出意外。
  • 另一種作法為參考「讓 WIN8 / WIN10 能用 CTRL + SPACE 切換中英輸入」→「三、移除新注音」→「1. 新增英文輸入」,為 Windows 新增語言「英文」,作為英數輸入
3. 新增語言「英文」為 Windows 新增語言「英文」,是網路上常見的英數輸入替代方案,本篇沒有將此作法當作主要方案,主要原因為:
  • 操作比較麻煩
  • 新增過程需要另外安裝檔案、使用一些磁碟空間
然而,如果習慣新增語言「英文」的話,採用這個方案也是可行的。
更多 Windows 相關文章:

了解文章沒被 Google 收錄的真正原因__減少在 Search Console 打轉的時間

$
0
0
why-google-search-console-not-index-posts.jpg-了解文章沒被 Google 收錄的真正原因__減少在 Search Console 打轉的時間不少站長看到 Google 網站管理員(Search Console)的錯誤訊息會很恐慌,在 FB 社團「Blogger 經營學習資源分享」不時看到相關提問,私下我也會收到諸如這些問題:
  • Search Console 後台通知「頁面會重新導向」怎麼辦
  • 文章即使手動建立索引也無法成功(Google也搜尋不到)
  • 錯誤訊息「已檢索/已找到-目前尚未建立索引」要怎麼辦
前幾年我寫了「文章更新速度與 Google 索引頻率、及 SEO 的關係」,2019 已有知名美食部落客感覺文章收錄的速度變慢,難怪站長們看到 Search Console 錯誤訊息常有驚弓之鳥的感覺,可能認為沒有解決這些錯誤的話,文章就沒法被收錄,讀者也無法從 Google 搜尋到這些文章。 網路的世界變化很快,很久以前或許只要正確提交網站地圖,文章就能被收錄,但我上面 2019 的文章也提到了:
以前 Google 的工作量,不等於現在 Google 的工作量。每天全世界文章增加的數量,跟以前比絕對是天文數字。那麼 Google 伺服器一定得有所取捨,才有辦法處理這麼大的資料量。
既然遊戲規則 Google 隨時可以更改,我認為 Google 對收錄文章這件事的態度已經跟一、二十年前大不相同,如果不想從遊戲登出的話,我們只能努力從各種官方釋放的訊息,以及各種蛛絲馬跡來察覺背後運作模式的更迭。 (圖片出處: pxhere.com)

一、Search Console 常見索引錯誤

1. 教學說明進入主題之前,需先了解一下基本知識,看看 Search Console 常見的索引錯誤狀況有哪些。這篇文章「【完整指南】2022 Google Search Console教學(附索引問題處理)」非常詳盡可以作為參考。 由於內容很多,跟本篇相關的內容請直接看「Google Search Console 涵蓋範圍」→「4. 排除」,這邊就是所有索引錯誤的狀況說明。 2. 常見索引錯誤從上述內容,直接摘錄比較重要的常見索引錯誤,為以下兩項:
1. 已檢索 – 目前尚未建立索引 原因:Google 已經爬取你的頁面了,但是還沒索引,可能會在未來索引(或不索引)。 解決辦法:這個狀態蠻常有錯報的情況發生,建議先透過『site:該頁面網址』檢查該頁面是否被索引,若無則透過網址審查工具檢查該頁面是否有問題。 2. 已找到 – 目前尚未建立索引 原因:Google 已經找到該頁面,但還沒看裡頭是什麼內容。 說明:有可能是檢索預算不夠,或是網站流量超載,所以 Google 安排下次檢索,常常有此情況則記得優化檢索預算。
為何這兩項需要特別提出來,是因為這兩個錯誤都只能靠 Google 哪天想到了,才會幫我們處理。其他的索引錯誤,點進去後都能看到處理說明,多半照著做就能進行修正與驗證。 3. 名詞解說前面第2點的教學,如有不熟悉的名詞,請見以下說明:

二、龍頭網站的文章索引狀態

「已檢索/已找到-目前尚未建立索引」這兩個棘手的索引錯誤要怎麼解決呢?剛好我手上有多個網站可以進行測試,都是自行開發的網路服務,各種等級都有,以下就來逐一檢視 Search Console 的索引狀況。 1. 索引狀態首先是「CC0 免費圖庫搜尋引擎」,雖然流量普通,但因為進入市場的時間很早,從建立之初就已經是龍頭,搜尋關鍵字 CC0一定會看到。 why-google-search-console-not-index-posts-1.jpg-了解文章沒被 Google 收錄的真正原因__減少在 Search Console 打轉的時間進入 Search Console 檢視索引狀態:
  • 已檢索-目前尚未建立索引:雖有 16 個,但都非文章頁面,可以無視
  • 所有其他未編入索引的原因:點開後都沒有文章頁面,可以無視
  • 已找到-目前尚未建立索引:0 個,非常完美,代表所有文章頁面都已被收錄
2. 流量狀態why-google-search-console-not-index-posts-2.jpg-了解文章沒被 Google 收錄的真正原因__減少在 Search Console 打轉的時間這是後台文章流量狀態,可看到上圖紅框標示的兩個圖庫,從 2021 年發布,到現在 2023 年 10 月,兩年半的時間瀏覽數只有 100 出頭,依然不影響 Google 將其收錄的決心。 3. 觀測結果這個龍頭搜尋圖庫網站其實鮮少更新,但今年中有新增數個 AI 圖庫頁面,看來早已全數收錄,那麼可以做個簡單的註腳:
  • 權重相當大的龍頭網站,即便流量不大,不常更新,新文章頁面依然很快會被 Google 收錄

三、熱門網站的文章索引狀態

接下來觀察的是「台灣景點人潮即時影像」,由於進入市場較晚,尚未撼動該領域的龍頭地位,但流量跟一般部落格相比,算是相當之大。若要有個基準點,跟前面的「CC0 免費圖庫搜尋引擎」相較之下,流量是其十多倍以上,不是同一個等級。 搜尋即時影像的相關關鍵字時,大多會是第一頁名列前茅,評比為熱門網站算是不為過。 1. 索引狀態why-google-search-console-not-index-posts-3.jpg-了解文章沒被 Google 收錄的真正原因__減少在 Search Console 打轉的時間進入 Search Console 檢視索引狀態:
  • 已檢索-目前尚未建立索引:雖有看起來嚇人的 617 個,但非文章頁面,都是無用的 feed、標籤、搜尋頁面,可以無視
  • 其他不重要的就不再贅述
  • 已找到-目前尚未建立索引:2 個,這需要解決
why-google-search-console-not-index-posts-4.jpg-了解文章沒被 Google 收錄的真正原因__減少在 Search Console 打轉的時間點進去後,看到上圖紅框處,這個頁面是「台北信義路-基隆路即時影像」,等會找出這個頁面看是怎麼回事。 上圖另一個網址非文章頁面,不必處理。 2. 流量狀態why-google-search-console-not-index-posts-5.jpg-了解文章沒被 Google 收錄的真正原因__減少在 Search Console 打轉的時間這是後台文章畫面,上圖紅框即為前面沒建立索引的頁面,跟其他頁面相比之下的確滿突兀的,原來是流量特別低,三年來瀏覽數不到 100,看來這就是沒被 Google 收錄的原因3. 觀測結果這個熱門網站不但流量大,而且更新頻繁。即便如此,也不代表所有文章都會受到 Google 青睞,那麼可以做個簡單的註腳:
  • 權重大、但非龍頭的熱門網站,只要某篇文章的流量不大,Google 依然不會收錄

四、冷門網站的文章索引狀態

最後觀察的是「ICON 免費素材搜尋引擎」,這個網站沒什麼知名度,也沒什麼流量,幾乎搜尋不到這個網站,剛好跟前兩個觀測對象形成強烈對比,可以驗證更多不一樣的正反面資訊。 1. 索引狀態why-google-search-console-not-index-posts-6.jpg-了解文章沒被 Google 收錄的真正原因__減少在 Search Console 打轉的時間這個網站今年(2023)六月時進行大更新,新增了二十多個圖庫,但時至今日(十月中)只有一個頁面被 Google 收錄。上圖為進入 Search Console 後看到的索引狀態:
  • 二十多個未被索引的頁面,分別出現在兩處紅框的項目:「重新導向錯誤」、「已找到-目前尚未建立索引」
  • 「重新導向錯誤」這個項目,在前兩個網站都沒看到,為首次出現
  • 究竟這些未被收錄的頁面,為何有些被 Google 視為「重新導向錯誤」、有些被視為「已找到-目前尚未建立索引」,目前看不出規律
  • 請注意,上圖還可看到,「已找到-目前尚未建立索引」我已提交驗證完畢,但對文章收錄一點幫助也沒有
  • 這二十幾篇文章,我也一一手動提交過,但現在你終於可以知道,以上做的這些事,Google 可說是連正眼也不會瞧一下,都是做心酸的!
why-google-search-console-not-index-posts-7.jpg-了解文章沒被 Google 收錄的真正原因__減少在 Search Console 打轉的時間試著點進首次看到的「重新導向錯誤」,上圖紅框發現兩個值得注意的網址,之後可用來交互比對及論述。 2. 流量狀態why-google-search-console-not-index-posts-8.jpg-了解文章沒被 Google 收錄的真正原因__減少在 Search Console 打轉的時間這是後台文章畫面,上圖紅框有三個可以重點說明的頁面:
  • Pixabay:這是今年 6 月至今唯一被收錄的頁面,可看到「瀏覽數」是新文章中最高,也是我能 100% 認定 Google 就是依據「流量」來收錄頁面。因為當初可是幾乎天天盯著 Search Console,監看新文章何時能被收錄,直到這篇的流量達到某個數字門檻後,才被 Google 正式索引。
  • 另外兩篇沒被收錄的,瀏覽數至今分別為 140、135,算是新文章中第 2、3 高,就是前面「重新導向錯誤」紅框標示的那兩篇。我只能臆測,「重新導向錯誤」大概會是,Google 有意收錄,但流量還未達標需要再加把勁,所以先掛在這個項目之下。(然而這些文章跟 "重新導向錯誤"實則沒任何關聯)
  • 延續同樣邏輯臆測,掛在「已找到-目前尚未建立索引」的文章,代表的意思就是:這些文章流量低到 Google 懶得理,暫時不用抱太大希望
現在知道 Google 收錄文章的評判重點是「流量」後,如果本篇文章你有看仔細的話,會發現這個網站沒被收錄的兩篇文章,四個月累積的瀏覽數 140、135,甚至比第一個網站紅框標起來的兩篇文章,累積兩年半的瀏覽數還要高(130、111)。 但要提醒的是,第一個網站可是所有文章都被收錄了呢!相信從這個結果,你也看出更多 Google 收錄文章的邏輯了~ 3. 觀測結果經由以上觀察,可以做出以下推論:
  • Google 有可能對某些重點網站(知名度高、龍頭)極度信賴,只要有文章就會立即收錄
  • 也有可能是,現今 2023 年的時間點,Google 開始變得極為嚴苛,文章必須先達到一定的流量門檻才會被收錄。
  • 無論實際情況是以上那一種,總之對於流量小、知名度不夠的冷門網站,文章流量若沒有衝到一定的數字,是不會獲得 Google 青睞的。
  • 小網站新文章想被收錄,要付出的努力,可能必須比大網站還來的多

五、Google 對文章索引速度的態度

1. 官方說詞做完實驗與觀察後,來找找官方是否對文章索引速度有什麼相關看法,我搜尋到 Google 官網這個頁面: 以下節錄與文章索引速度相關的重要資訊:
Gary:Tom Baker 問,我有 16,000 個網頁,系統是否需花費六個月以上的時間才能建立索引?我發現每週增加的數量為 5 到 15 個,但我覺得這個速度很慢。 建立網站索引的速度取決於許多因素,但最重要是網站的品質,其次是網站在網際網路上的熱門程度。如果您已盡可能提供最高品質的內容,可以嘗試在社群媒體上投放宣傳內容,或許就會有人開始討論您的網站,這樣應該會有幫助。
重點就是這兩句話:
  • 最重要是網站的品質
  • 其次是網站在網際網路上的熱門程度
這其實滿微妙也滿有趣的,Google 明確給出了要點,但又似乎什麼也沒說,這些不都是所有關注 SEO 的站長們知道的事嗎? 微妙的地方在於,即便站長們都知道這些事,但注意力卻鮮少放在這兩點,反而可能覺得要解決 Search Console 的索引錯誤訊息,文章才能被收錄,這是非常大的盲點。 而我也是在處理「ICON 免費素材搜尋引擎」這個網站的索引錯誤過程,發現「流量」才是 Google 收錄文章的關鍵,自此不在 Search Console 的各種無用提示資訊上打轉2. SEO 永遠是內容為王 Google 說的「網站的品質」及「網路上的熱門程度」,最終必須有個量化指標,才能交由程式進行文章收錄與否的基準判斷。這個量化指標是商業機密,Google 不會公佈,我們也不可能知道。 但是從我們自己的角度來判斷何謂「網站的品質」及「網路上的熱門程度」,最簡單直白的量化數據就是「流量」。雖然「文章內容好壞與否」是主觀、抽象的,但只要內容夠好、能滿足越多人的需要,自然能帶來「流量」,也越能「在網路上引起討論」。 說到底,SEO 的核心「內容為王」,終究是可以套用在所有層面,包括本篇主題「Google 收錄文章的速度」。

六、部落格文章是否被 Google 收錄就能帶來流量?

其實看到這裡,相信讀者都了解重點是什麼了,也知道本篇要傳達的訊息是什麼,接下來只是再稍稍補充一些想法。 1. SEO 與流量的關係很久以前寫過一篇「部落格網站是否加強 SEO 就能帶來流量?」,是因為看到太多站長對 SEO 技巧入魔,完全對 SEO 本末倒置,把 SEO 看成 "因",把流量看作 "結果",殊不知完全相反:
  • Google 不會雪中送炭:如果你的網站原本流量就很低、沒什麼人看,Google 給你的起始排名也會非常低,就像 "米其林評鑑"不會去找沒沒無名的餐館打分數。
  • Google 只會錦上添花:如果你的網站經營得很好,人潮絡繹不絕,Google 也會主動把第一頁的排名頒給你。就像出了名的餐廳,各大媒體、雜誌都會爭相報導一樣。
結論就是:你必須先有流量,Google 才能給你更多的流量2. 文章收錄與流量的關係一間圖書館的空間是有限的,一開始藏書不夠多時,有新書來圖書館都會收。等到書櫃都放滿了,圖書館就會開始去蕪存菁,把沒人借的書剔除,從新書中篩選熱門書籍上架,如此反覆。 搜尋排名也是一樣,一般人點完前三頁就很少按下一頁了,假設 Google 肯收錄 40 頁就不錯了,那麼全世界每天不斷產生的新文章,你覺得 Google 會如何取捨及收錄呢?Google 若是收錄超過 40 頁份量的文章有什麼意義嗎? 或許以前我們覺得只要網站地圖有提交,文章就會被收錄,說不定是因為書櫃還沒滿。現在我們不得不面對的狀況是,文章得先夠有水準,才能獲得上架的資格。 所以,當站長們想著「只要想辦法讓文章被 Google 收錄,就能帶來搜尋流量」,現在這個想法也成為因果錯置了—— 結論就是:你必須先有流量,Google 才會收錄你的文章

七、小結

簡單為本篇做個總結:
  • 以往 Google 索引還沒飽和時,只要提交網站地圖,文章就能被收錄
  • 現在索引飽和了,文章需要先向 Google 證明有資格被收錄
  • 在 Search Console 做了再多事,都不會左右 Google 是否收錄文章的標準
  • 要證明文章有資格被 Google 收錄,需要提昇「網站的品質」及「網路上的熱門程度」
  • 所以「內容為王」是永遠的精髓
  • 站長也需要自行利用各種社群媒體替文章宣傳,才能提昇「網路上的熱門程度」
  • 最終讓以上所有努力反應在「流量」上,達到一定門檻後,Google 自然會收錄文章
更多 SEO 相關文章:
更多 Search Console 相關文章:

玩 DOSBOX 遊戲如何調整視窗大小+位置+解析度

$
0
0
dosbox-window-setting.jpg-玩 DOSBOX 遊戲如何調整視窗大小+位置+解析度最近想重溫學生時代玩的骨灰遊戲,雖然畫質現在看起來慘不忍睹(成了像素風格遊戲),但這類「文字冒險遊戲」其實挺有內涵及挑戰性,已現代術語來說也可說是硬核、硬派寫實,玩家扮演的角色所有動作都必須輸入英文來操作,若沒有一定的英文基礎,就算拼命查字典,也不見得知道當下該做的動作應該輸入什麼單字。 最早開發「文字冒險遊戲」的始祖為 Sierra 這間遊戲公司,這篇「SIERRA冒險史」除了發展史也可知道早期知名遊戲有哪些。然而這類型遊戲現代絕不可能再出現,所以只能找當年的舊遊戲來玩。即便從 Steam 購買,一樣只能透過 DOSBOX 執行,畢竟遊戲公司不可能為老遊戲製作 Win 10 的執行版本。 而在 Win10 底下執行 DOSBOX 遊戲,又陸續遇到一連串問題,乾脆將所有狀況的解決方法整理成本篇的心得。

一、修改設定檔

DOSBOX 的設定檔副檔名為 .conf,通常可以在 DOSBOX 目錄中找到,例如 v0.74 的檔名會是這樣: dosbox-0.74.conf用記事軟體例如 Notepad++ 開啟就能看到所有設定參數,而且修改說明非常仔細,不過全都是英文需要花點時間研究。 然而從 Steam 購買的老遊戲,可能會找不到上面這個檔案 dosbox-0.74.conf。以我玩的 Police Quest I(警察故事1)為例,要找到 DOSBOX 設定檔,需要進入類似這樣的目錄: E:\Police Quest Collection\PQ1\DOSBOX可找到這個檔案 dosboxPQ1.conf,然後編輯該檔即可。 接下來說明各種情況要如何修改。

二、以全螢幕啟動

1. 切換全螢幕沒修改設定檔的情況下,有可能會以視窗模式啟動遊戲,而老遊戲在視窗模式下通常解析度很小,玩起來傷眼睛。Windows 視窗切換為全螢幕的熱鍵須一記: Alt + Enter想從全螢幕切換為視窗模式的話,一樣按此熱鍵。 2. 預設全螢幕執行每次都按 Alt + Enter很麻煩,修改 DOSBOX 設定檔就能讓遊戲預設以全螢幕執行。請開啟自己遊戲對應的 DOSBOX 設定檔,將參數 fullscreen 改為 true: fullscreen=true fullscreen 這個參數位於 [sdl]~[dosbox] 之間。

三、自訂視窗大小

1. 使用全螢幕的不便雖然全螢幕看起來比較舒服,但由於我玩的是「文字冒險遊戲」,必須頻繁查詢英文單字,所以會另外開啟字典工具,用 Alt + Tab切換視窗。當遊戲是全螢幕模式時,除了切換不同視窗會改變螢幕解析度造成延遲,另外就是不斷改變解析度感覺對螢幕也有點操,所以覺得還是不要用全螢幕模式比較好。 2. 修改視窗大小dosbox-window-setting-1.jpg-玩 DOSBOX 遊戲如何調整視窗大小+位置+解析度若將遊戲改為視窗模式,老遊戲的視窗初始尺寸非常小,必須將視窗改為自訂尺寸。 請開啟自己遊戲對應的 DOSBOX 設定檔,修改參數如下: fullscreen=false windowresolution=1920x1080
  • 其中 1920x1080 請改為自訂尺寸
  • 視窗大小的數值可能要不斷微調測試,因為遊戲本身可能會維持既定的畫面比例

四、自訂視窗位置

dosbox-window-setting-2.jpg-玩 DOSBOX 遊戲如何調整視窗大小+位置+解析度修改完將 DOSBOX 視窗尺寸變大後,視窗的初始位置通常我們不會太喜歡,因為八成會超出螢幕,導致每次執行遊戲後,都得手動將視窗拉到滿意的位置才能開始遊戲。這件事多做幾次後,就會希望視窗能自動出現在固定位置。 找到這個討論串「Is it possible to preset the initial dosbox window position?」總算有了頭緒,必須修改 Windows 系統的「環境變數」,以 Win 10 為例,操作流程如下: dosbox-window-setting-3.jpg-玩 DOSBOX 遊戲如何調整視窗大小+位置+解析度
  • 開始 → 設定 → 系統 → 關於 → 最右側找到「進階系統設定」→ 環境變數
  • 如上圖按「新增」→ 變數名稱填入「SDL_VIDEO_WINDOW_POS」
  • 變數值填入 x,y 軸座標,例如 0,0代表左上角處
  • 將畫面上所有「確定」都按一按即可生效

五、自訂視窗比例

有時可能會發現,自訂視窗尺寸後,並沒有按照設定的比例呈現,有可能是該遊戲預設會以某個固定比例呈現,此時可修改某些 DOSBOX 參數試試看: aspect=true scaler=none以上這兩個參數位於 [render]~[cpu] 之間。

六、解決畫面模糊問題

現在的螢幕解析度都是 1920x1080 起跳,當老遊戲的視窗尺寸放大數倍後,如果出現畫面變得模糊時,可以嘗試修改這個 DOSBOX 參數試試看: output=openglnb以上這個參數位於 [sdl]~[dosbox] 之間。
更多 Windows 軟體相關文章:

會員系統公告:FB 登入功能失效 請重新註冊

$
0
0
本站「會員系統」在進入 2024 後,就有讀者反應無法加入會員,FB 登入時會顯示 "應用程式錯誤",這是因為「FB 登入 API」現在已經不開放給個人使用,強制開發人員一定要完成「商家驗證」才能取得權限。這也就是說,現在只要沒開公司、取得營業登記證明,網站將不能裝 FB 登入功能。 其實我對 Facebook 的使用體驗一向不太好,開發應用程式時也常感到挫折,由於頻繁改版、權限一再變更,導致功能失效或工具不能使用,近年則是每隔一段時間就要求開發人員進行許多細節審查。而這些事在開發 Google 應用程式時則很少遇到,因此決定全面將會員系統改用 Google 登入。 只是如此一來,原本的會員資料將失效,必須重新註冊帳號,不過主要影響的僅是「加值會員」,請 WFU BLOG 舊會員注意本篇說明。 (圖片出處: pixabay.com)

一、加值會員資料移轉

舊的會員註冊資料是以 Facebook 帳號資訊作為儲存依據,現在起註冊會以 Google 帳號資訊作為依據,然而兩種帳號如何轉換會是一個大問題。能作為相同資訊進行判別的只有「Email 郵件地址」,然而使用者註冊 FB 與 Google 帳號時不一定會使用相同 Email,所以也不宜貿然使用程式自動轉換新舊帳號,以免發生誤判。 「加值會員」由於在本站會員系統內儲存過點數,本站會協助轉換點數到新帳號,不過只能採人工方式處理(不宜由程式判斷)。請用 Google 帳號重新註冊後,填寫文末的「三、聯絡表單」留下這些資訊:
  • 註冊帳號名稱
  • 以前 FB 登入註冊使用的 Email
  • 現在註冊使用的 Google 帳號 Email
填寫之後會儘速處理,若一段時間仍發現沒有移轉點數,可再與本站聯繫。

二、一般會員重新註冊

沒有儲值過點數的「一般會員」,加入會員系統的主要功能為閱讀「會員限定文章」,那麼新舊帳號資料沒有轉換並不會造成什麼問題,所以請用 Google 帳號重新註冊即可。

三、聯絡表單

加值會員使用上有任何問題,請用下面的表單與我聯繫:
稱呼:(必填)
電子郵件:(必填)
填寫表單網址:(必填)
填寫表單目的:(必填)
請詳細描述您的需求、問題或意見:(必填)
更多會員系統相關文章:

FB 登入 API 只允許商家使用,如何讓 Google API 實現自動登入?

$
0
0
2023 年底前幾個月收到 FB 給開發人員的通知,提醒「登入 API」要完成「商家驗證」,否則使用權限會受到影響。果然進入 2024 後本站的「會員系統」因為使用了 FB 登入,立刻收到讀者回應,說會顯示 "應用程式錯誤"無法進行註冊。 雖去年事先想處理此事,但看過「FB 官方文件」發現,商家驗證需要提供 "公司登記執照"、"營利事業登記證"、"政府核發的營業稅務文件"...等相關資料,沒有開公司的話根本無能為力。 查了一些資料,例如「想要串接整合 Facebook 登入/註冊功能?你得先進行 Facebook 商家驗證。」,可以確定對於 "個人"開發者而言,想使用 FB 登入 API 已是死路一條,只能研究如何用 Google API 來取代。 由於 2024 Google 登入 API 也有一些變革,要做到跟 FB 一樣能自動登入也不是那麼容易的事,請見本篇的心得整理與實作範例。 (圖片出處: pixabay.com)

一、Google 登入 API 說明

1. 2023 Google 登入去年 Google 登入功能有一次重大變革,通知開發人員 API 必須由原本的「Google Sign-In 移轉為 Google Identity Services(GIS)」。因為操作方式及語法變化很大,已將實作範例程式碼整理到這篇「2023 新版 Google 登入 API」。 2. 2024 Google 登入今年 2024 有使用 Google 登入功能(GIS)的開發人員,都會收到這個「不使用第三方 cookie」的通知,對於操作 API 有稍微的變更,簡單摘要如下:
  • 為了改善使用者隱私,Chrome 瀏覽器會逐步不使用第三方 cookie
  • 登入時瀏覽器會顯示使用者提示
  • 參照「遷移網頁應用程式」這部份的內容,程式碼中有些方法會受到影響,例如 isDisplayMoment()、isDisplayed()、isNotDisplayed()、getNotDisplayedReason()、getSkippedReason()...
由於不使用第三方 Cookie,代表不一定能紀錄上次登入的是哪個帳號,較難實現以往使用「FB 登入 API」的自動登入效果。 3. 無痕模式的處理實測 Google 登入功能(GIS)在無痕模式下的效果:
  • 使用官方預設按鈕,點擊後可彈出登入視窗
  • 使用自訂按鈕,也許是不能使用 cookie 的關係,無法正常執行、彈出登入視窗
如果想兼容瀏覽器無痕模式,或是開發的程式比較簡單,或許使用官方預設登入按鈕即可。 但官方登入按鈕彈性較小,開發起來較不方便,我個人還是習慣用官方 Javascript API 操作自訂按鈕,所以用程式碼偵測到無痕模式時,跳出警告訊息提醒訪客不要用無痕模式。

二、Google API 如何自動登入

Google 登入功能(GIS)預設不使用「自動登入」效果,然而各大網站的會員都能自動登入,若本站讓會員每次都要手動點個幾下才能登入,著實是非常不友善的設計。為了實現以往使用「FB 登入 API」的自動登入效果,得詳細研究 Google 官方操作文件。 1. 為何 Google 無法自動登入經過我的實測,使用官方預設按鈕登入,而且啟動「自動登入」的設定,但發現重整頁面後,仍然不會記憶我上次登入的帳號,這讓我十分納悶。 後來找到官方「自動登入及登出」的說明:
自動登入必須符合下列條件...使用者必須先登入自己的 Google 帳戶...同意與您的應用程式分享帳戶設定檔...如果使用者有多個 Google 帳戶,而且造訪您的網站,就必須先登入單一 Google 帳戶,並提供該帳戶的同意聲明。
終於找到原因了,原來我的瀏覽器有多個 Google 帳號,可能現在 Google 決定不使用第三方 cookie,導致無法記憶上一次登入的帳號,那麼當我有多個 Google 帳號時,就無法自動登入了。除非我把 Google 帳號登出到只剩一個帳號,這樣才能實現「自動登入」... 對於這樣的結果我當然無法接受,哪有辦法告訴所有會員,必須先登出其他 Google 帳號才能自動登入,因此繼續研究解決方案。 2. 研究官方文件根據官網文件「使用 Google JavaScript API 登入」,可用來實作自動登入的參數有這些:
  • auto_select: 設定為 true 可以啟用自動選取功能 → 前面有提到,當使用者有多個 Google 帳號時,登入功能依然無法判定如何自動選取
  • login_hint: 如果設定了特定數值,例如 Google 帳號 email,就能自動選取該帳號執行登入
有了以上這兩個參數,就能組合起來實現自動登入。既然 API 不使用第三方 cookie 來儲存上次登入的帳號,我們可以自行儲存在 localStorage,然後利用 login_hint 讀取,轉個彎完成自動登入的效果。

三、實作範例

1. 準備動作操作 API 之前需要先建立 Google API 專案,如果還沒建立過的話,請完成以下流程: 2. 範例程式碼以下用「Bootstrap 按鈕 + jQuery」製作範例程式碼: <!--jQuery--> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <!--Bootstrap--> <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" /> <!--登入、登出按鈕--> <div id="GOOGLE_login"><button class="btn btn-large btn-primary">GOOGLE 登入</button></div> <div id="GOOGLE_logout"><button class="btn btn-large btn-warning">GOOGLE 登出</button></div> 目前狀態: <div id="GOOGLE_status"></div> <script> let autoLoginGoogleAccount = localStorage.autoLoginGoogleAccount || ""; // 自動登入儲存的帳號 let $status = $("#GOOGLE_status"); function init() { $.getScript("https://accounts.google.com/gsi/client", function () { // 進行登入程序 startLogin(); }); } // 進行登入程序 function startLogin() { google.accounts.id.initialize({ client_id: "5432xxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com", callback: onLogin, prompt_parent_id: "GOOGLE_login", // 設定登入視窗的位置, 若不設定此參數則預設出現在網頁右上角 auto_select: true, // 自動登入 login_hint: autoLoginGoogleAccount // 自動登入儲存的帳號 }); google.accounts.id.prompt((notification) => { // 處理登入失敗 loginFail(notification); }); } // 處理登入取得的資訊 function onLogin(response) { var credential = response.credential, profile = JSON.parse(decodeURIComponent(encodeURIComponent(window.atob(credential.split(".")[1].replace(/-/g, "+").replace(/_/g, "/"))))), html = ""; // 儲存登入帳號 localStorage.autoLoginGoogleAccount = profile.email; html += "ID: " + profile.sub + "<br/>"; html += "會員暱稱: " + profile.name + "<br/>"; html += "會員頭像:" + profile.picture + "<br/>"; html += "會員 email:" + profile.email + "<br/>"; $status.html(html); } // 處理登入失敗 function loginFail(notification) { /*notification.g 數值 → display: 登入中, skipped: 取消登入, dismissed: 登入成功*/ if (notification.g == "skipped") { // 取消登入時 $status.html("取消登入 Google 帳號,請稍後再試"); } if (notification.g == "display"&& notification.h == false) { // 無痕模式無法登入 $status.html("無法登入 Google 帳號,請離開無痕模式或使用 Chrome 瀏覽器登入。"); } } // 進行登出 function logout() { // 刪除自動登入儲存的帳號 localStorage.autoLoginGoogleAccount = ""; // 登出 google.accounts.id.disableAutoSelect(); $status.html("已登出"); } init(); // 點擊登入 $("#GOOGLE_login").click(function() { // 進行登入程序 startLogin(); }); // 點擊登出 $("#GOOGLE_logout").click(function() { // 進行登出 logout(); }); </script>
  • 紅色字串請置換為前面「處理 OAuth 憑證」流程取得的「用戶端 ID」
  • 程式碼請放在前面「處理 OAuth 憑證」流程設定的網站
3. 範例效果下面按鈕為範例效果,可進行操作並注意對應狀態的文字。 首次登入完畢後,重整頁面即可看到自動登入的效果。
目前狀態:
更多 Google 相關文章:

Blogger 日期格式化詳解

$
0
0
Blogger 如果想調整日期格式的話,後台就有許多排列組合可選,照理說總能找到一個滿意的。只不過 Blogger 是外國人設計的產品,日期格式主要按照西式的排列習慣,還真不一定能符合所有人喜好。 雖然 Blogger 官方並沒公開關於日期格式化的說明,不過網路上倒有一些資料可循,本篇會詳細說明如何將日期改成自己想要的格式,中英文都可以。 (圖片出處: unsplash.com)

一、注意事項

1. 參考資料本篇所有修改語法的資料來源為這兩篇: 從發布時間來看,都是至少 4 年(2020)之前的資訊,代表 4 年以前按照這些資料來修改 Blogger 範本是沒問題的,那麼現在呢? 2. 官方 RWD 範本經實測後,官方 RWD 範本例如 Contempo、Soho、Emporio、Notable、Essential,如果想要搜尋範本中跟日期相關的語法,會發現已經找不到能修改的地方了,代表過去幾年 Blogger 官方 RWD 範本又做了不小的變更,不讓使用者修改的地方又更多了。 這個狀況我一點都不意外,因為當初 2017 年「Blogger 推出官方 RWD 範本」時,我就做了這樣的結論:
官方的設計明顯希望站長們不要動這個 RWD 範本,預設的效果就放手去接受它吧
所以對於官方 RWD 範本的使用者,如果你是熟練的老手,才建議參考本篇的資料,自行在範本中找合適的地方進行改。如果是新手的話,建議要嘛接受預設效果,要嘛改用「官方非 RWD 範本」 3. 官方非 RWD 範本怕新手不知道什麼是「官方非 RWD 範本」,所以多說明一些,例如 Simple、Picture Window、Awesome、Watermark、Ethereal、Travel。 本篇的語法建議使用在以上這些範本,比較不會有挫折感。

二、首頁每篇文章都顯示日期(新版)

1. 修改方式多年前寫過一篇「讓 Blogger 首頁每篇文章都能顯示日期」,剛好本篇參考資料的語法,可以讓這件事變得簡單,所以提供新版的作法。 在範本中搜尋以下字串: <b:if cond='data:post.dateHeader'> <h2 class='date-header'><span><data:post.dateHeader/></span></h2> </b:if>改成以下字串即可: <h2 class='date-header'><span><data:post.date/></span></h2>2. 原理說明 Blogger 語法現在多了 <data:post.date/>日期資料,不必再像以前須判斷是否為該日期的第一篇文章,改用 <data:post.date/>後就能每篇文章都顯示日期。

三、自訂日期格式

1. 日期格式化語法根據參考資料,Blogger 日期格式化語法如下: <b:eval expr='data:post.date format "YYYY-MM-dd"'/>
  • YYYY: 年份 4位數
  • MM: 月份 2位數(自動補0)
  • dd: 日期 2位數(自動補0)
由於我們使用了分隔符號 "-",在網頁上顯示的效果如下: 2024-01-252. 修改技巧可任意使用中文字串,就便成了中文日期,例如: <b:eval expr='data:post.date format "YYYY年M月d日"'/>顯示效果如下,不會自動補 0: 2024年1月25日3. 修改範本接著以「官方非 RWD 範本」為例,說明如何修改日期格式。範本中代表日期資料的有這些標記: <data:post.dateHeader/> <data:post.timestamp/> <data:post.date/>在想要修改日期格式的地方,將以上這幾個 Blogger 標記語法改成前述的日期格式化語法即可。

四、日期格式化參數

前面提到的參考資料「blogger-snippets-Date」整理了許多日期格式化參數,建議修改時可以參考,以下列出一些實用的修改方式,請注意大小寫有分:
  • 月份:MMM → 顯示三個字英文縮寫,例如 Jan, Nov
  • 月份:MMMM → 顯示完整英文,例如 January, November
  • 星期:ww → 顯示兩位數
  • 天:EEE → 顯示三個字英文縮寫,例如 Mon, Tue
  • 天:EEEE → 顯示完整縮寫,例如 Monday, Tuesday
  • 上下午:aaaa → 例如 AM, PM
  • 小時:hh → 顯示12小時制,兩位數
  • 小時:HH → 顯示24小時制,兩位數
  • 分鐘:mm → 顯示兩位數
更多「Blogger 語法」相關文章:

Google Drive 外連圖片無法顯示的解決方法

$
0
0
最近有客戶表示擺放在 Google Drive 的圖片,在網頁上都無法顯示了,但如果把圖片網址貼在瀏覽器網址列,這張圖片外連其實還是能顯示。而且進入雲端硬碟帳號檢視,圖片並沒有不見,也都能叫出來顯示,不曉得發生什麼情況。 查了一下國外論壇討論串,發生災情的時間點大致是上個月初(2024年1月),有人提到這件事跟「Google 雲端硬碟中的第三方 Cookie」有關,而這個第三方 cookie 的變革在前陣子的的文章「如何讓 Google API 實現自動登入? 」→「一、Google 登入 API 說明」→「2. 2024 Google 登入」也有提到,代表今年 2024 因為 Google 逐步移除第三方 cookie 造成了不少影響。
<< 請注意!本篇文章含會員加值文章內容 >>
(圖片出處: pixabay.com)

一、Google Drive 圖片測試

測試了一下 Google Drive 圖片,根據我之前寫的「Google Drive 外連產生器 V2」,來看看各種情況。 這是一個分享連結範例: 這是上圖的 Google Drive 外連範例: 以上連結點開後都能看到圖片,但如果使用 html 圖片語法的話: <img src="https://drive.google.com/uc?id=1-2QjOJf8OpAw-mor_CINhKCCjQ-27tGA"/>下面就可以看到,這張外連圖片無法顯示了:

二、替代作法

國外網友提出了一些替代作法,我自己也發現了密招可以顯示圖片,但後來想想,如果 Google Drive 本意就是不想讓圖片被外連,那麼網路上流通的任何方法,Google 遲早都會封鎖起來,所以公開這些技巧一點好處都沒有。 所以跟「用 Github 存取網頁 JS/CSS 外連」一樣,我決定有必要設下一點障礙。如果已經是本站的「加值會員」,可兌換本文的隱藏內容;如果是本站的客戶請與我聯繫,會開通閱覽權限,可看到以下這四種技巧。
更多 Google Drive 相關文章:

英雄黃昏入門上手技巧

$
0
0
英雄黃昏入門上手技巧上一篇「介紹英雄黃昏」這款文字版三國策略遊戲,有提到介面資訊量不少,新手可能會不知道如何開始。本篇把開局初期流程跑一次,可以充當示範教學之用,相信看過後就容易上手了。

一、董卓亂政劇本

開局選這個劇本是因為對新手比較友善,只要陣營屬於「反董卓聯盟」,彼此同盟不會戰爭,開局比較沒有壓力。 英雄黃昏入門上手技巧自訂武將以司馬懿模版為例,開局會投入汝南孔伷陣營,旗下只有兩位武將,且潛在的在野人才多,日後要當太守或篡位都容易。遊戲初期的目標只需記得這兩件事:巴結老闆、當上主管。取得主控權後執行政令比較不會綁手綁腳。

二、日常事務

進入遊戲後的環境設定,請參考「上一篇」→「一、操作說明」→「3. 環境設定」,操作會比較順暢。 1. 偉業英雄黃昏入門上手技巧點擊螢幕上方紅框的「偉業」,可以設定遊戲目標。第一次玩的話,建議選「富可敵國」,可以獲得額外 1500 金,及「富豪」技能,會比較輕鬆。 想瞭解其他目標的話,可按右下角「技巧」看詳細說明。 2. 政務如前面所提,一開始的目標是當上主管(太守),這個遊戲會內定「功績」最高的武將為太守,所以遊戲初期主要就是累積功績及名望,根據名望高低可以在「名望商店」買到不同等級的道具。 英雄黃昏入門上手技巧而累積功績主要的途徑為執行政務,如上圖,可從右方紅框的「政務府」、「軍事府」來接任務,左方可看到執行項目,挑一個進行即可。 雖然「外交府」一樣可執行政務,但可能會失敗(與智力有關),為了避免浪費時間可以盡量不接外交任務。 而「政務府」中的「搜尋」、「登庸」都可能失敗,請自行評估或是只好不斷 S/L 了,不想那麼累的話可以接「軍事府」任務為主。 英雄黃昏入門上手技巧做了 20 天完成這次任務後,點上圖紅框「官職」,可看到功績增加了、薪水也漲了。只要不斷接單,遲早功績可以勝過其他武將。 同時孔伷武將少,沒人跟我們搶工作,這個月剩 10 天,還有多餘時間可以搶其他任務做、累積功績呢。 3. 裝備與市場「裝備」與「市場」這部分的操作與注意事項,請參考「上一篇」→「二、金錢」→「2. 市場交易」,以及「五、道具裝備屬性」→「1. 裝備欄位」

三、陳情

「日常事務中」的「陳情」可以獨立一個章節來講。 英雄黃昏入門上手技巧點擊右方紅框城池名稱(汝南)後,會出現:
  • 城市重要資訊
  • 陳情項目細節,如圖中 A 與 B
陳情主要分三類:訴訟、急缺、請求。 1. 訴訟上圖 A 為民眾訴訟,協助處理可以增加功績或名望(或兩者),所以遊戲初期務必每月要檢查並處理。 英雄黃昏入門上手技巧訴訟都是二選一,真的猜不出來可以 S/L。 2. 急缺上圖 B 為武將急缺,協助處理可以拉近關係。視要求的物品或武將是否重要,並不一定都要處理。 英雄黃昏入門上手技巧比如說要求的物品若是「肉類」或「魚類」,肉類可恢復體力,魚類可恢復氣力,這兩者都是買不到的,我會傾向不給。除非是我想提升關係的武將,才會考慮給肉跟魚。例如這次許靖想吃牛肉,我會決定不理。 英雄黃昏入門上手技巧而我想拉關係的孔伷(老闆),偏偏他想要的麻鞋我身上沒有,上圖顯示紅字「剩餘44天未完成」,點擊紅字後會出現提示文字,告知哪裡有賣,按「前往」就會自動跳到最近的城市,即可進行購買。 如果到了「軍需處」,如果身上有錢可以買一些負擔得起的低價品囤起來,將來有武將陳情就能以雙倍價格賣出。 3. 請求第三類陳情為「請求」,有可能是要求到各種特殊設施進行事務,例如到「論政台」舌戰、到「賭館」幫忙贏錢等等,可以再自行評估是否參加。

四、軍令狀

英雄黃昏入門上手技巧每年二月,上圖紅框的區塊會出現軍令狀,完成後可增加名望及得到獎金,細節可按上圖「驚嘆號」瞭解。 最高七星軍令狀,完成可得 50 名望 + 500 金。 英雄黃昏入門上手技巧按上圖紅框「刷星」按鈕,會隨機增加或減少星等,以及改變任務內容:
  • 「外交」有失敗的可能性,所以盡量刷出沒有外交的任務
  • 每個月都可以刷九次,所以不一定要每個月都 S/L。真的運氣都很差,可等年底再 S/L 刷出沒有外交的任務
  • 可以找一個關係「密切」的武將拜訪,一起做軍令狀可快速達標

五、人際關係

這部分「上一篇」→「三、人際關係」已經說了不少,可先參考之前的內容,以下繼續補充一些。 1. 社團之前沒有介紹社團,這裡特別說明加入社團對於人際關係的好處,點擊遊戲上方區塊的「社團」即可跳出社團一覽畫面。 英雄黃昏入門上手技巧點擊右邊的「申請」即可申請加入社團,大約要等幾個月才能通過。不過也可能沒通過,要隨時注意即時資訊。 社團要如何挑選呢?我認為以「強將」數量多的社團優先,因為申請成功後,會與所有社團成員關係大幅提升。 要查閱社團成員,可點擊上圖紅框處的成員數量。 英雄黃昏入門上手技巧以「桃園結義」社團為例,可看到成員有關、張、趙等猛將,加入這個社團的 CP 值是非常高的。 英雄黃昏入門上手技巧加入「桃園結義」後可看到,與劉、關、張、趙的關係從「陌生」直接跳到「交好」,省下許多交際的時間。 2. 喝酒喝酒在上一篇已經介紹過,這裡補充一些技巧:
  • 邀請喝酒的重點目標:君主、標記武將、配偶(有內助技能的武將)
  • 在賓館休息可恢復體力、氣力,還能恢復酒量
  • 在名望商店也可買「醒酒湯」恢復酒量
  • 提高酒量可以買到具裝備,例如晉陽、柴桑可能會有「九龍杯」(酒量+200),但也許每次開局不一樣
英雄黃昏入門上手技巧

六、特殊設施

簡單補充一下特殊設施:
  • 賭坊:由於會花費很多氣力,長期待賭坊或 S/L 的 CP 值都不划算。遊戲提供的攻略有建議,可先拜訪會占卜的武將,獲得運氣「大吉大利」後再去賭坊。
  • 書院:要花很長時間才能獲得書籍,不建議初期進行。
  • 狩獵場:要花不少時間,且不一定得到肉,多數情況下我會傾向把肉留著自己用。
  • 釣魚台:要花不少時間,且每次得到的魚數量不一,多數情況下我會傾向把魚留著自己用。
  • 論政台:建議可以不用去,除了花很長時間還可能輸,政治經驗的作用也不高
  • 鑄劍谷:不建議初期進行,因為關係好的武將常常會送武器/副手。
  • 馴馬場:不建議初期進行,因為關係好的武將也可能會馬匹。
  • 藏經閣:遊戲提供的攻略有建議,可先拜訪會占卜的武將,獲得運氣「大吉大利」後再去,對領悟進度有大幅加成。

七、太守

累積功績夠多時(大於同陣營其他武將),待在非君主的城市會自動成為太守,執行事務時可以擺脫許多限制,不像開局時綁手綁腳。例如 AI 君主常龜縮好幾年就是不進攻,但我們當上太守後,就能自主進行攻擊。 1. 制訂國策如能獲得「制訂國策」的權力,對於進攻他國會比較方便。前面提示過,開局後需與君主打好關係。 英雄黃昏入門上手技巧隨著關係上升,拜訪君主「制訂國策」的成功率很高時,便可提出要求。 英雄黃昏入門上手技巧英雄黃昏入門上手技巧英雄黃昏入門上手技巧成功後,點擊遊戲上方區塊的「國策」即可,可自由選擇要進攻的城池(按右邊的「選目標」選擇城市)。下個月初的會議,多數武將會依照國策進行表決。 2. 分配政務成為太守有不少好處:
  • 每月政務、軍務可指定武將執行
  • 連續 3 個月以上政績斐然,可增加名望、獲得獎金(連續 6 個月會收到「萬民傘」,可增加名望)
  • 政績斐然的定義為:政令執行率超過 80%,或是至少執行 5 個政令
  • 可以對該城市進行調兵遣將、調動該城市資源
  • 每月開會太守可直接指定該月目標
3. 調兵遣將英雄黃昏入門上手技巧說明一下太守如何調兵遣將,上圖孔伷打下空白城市新野後,WFU 因功績較高自動成為太守:
  • A:點擊城市會出現左側城市資訊
  • B:太守會多出「召」按鈕,如果本城將領數比較少的話,可以召集其他城市的武將過來。
  • C:太守會多出「調兵遣將」按鈕,點擊後出現左側 D 區塊
  • D:如果本城是後方補給郡,可以設定本城保留的資源、留守的武將數,超出時自動運往前線城市
  • E:如果要從本城運送資源到別的城市,可按此處的「本城手動」,選擇運送多少金、糧、士兵、兵裝等
  • F:如果要從本城派遣武將別的城市,可按此處的「本城手動」,選擇派遣的武將

八、作戰

英雄黃昏入門上手技巧介紹一下出戰的操作,月初開會決定戰爭後,便可以正式出戰,操作流程參考上圖:
  • A:點擊「軍事府」
  • B:會出現此區塊作戰選項
  • C:只有一個進攻目標時,進攻目標會以黑色顯示。如有一個以上進攻目標,此處的進攻城市會以「藍色」顯示,點擊後可選擇其他城市
  • D:點擊「點將」選擇出戰將領
英雄黃昏入門上手技巧
  • 每個武將都有「戰力」數值,把戰力最高的幾個排上去就對了
  • 軍師選擇智力高、能舌戰的,最好是能夠放輔助技能。除非軍師戰力很強,不然給 500 兵就可以了,免得浪費兵力
  • 戰力高的武將給多一點兵
  • 戰力不高但有輔助技能的武將都可派上場,給個 500 兵放技能都很好用

九、家書

每年年底都會收到家書,這個功能滿有趣的,最後特別介紹一下。 英雄黃昏入門上手技巧 12月1日注意看訊息,千萬別漏了「家書」,忘了處理可是損失很大的。到左側「貨物」就能看到,點開來使用即可,勾選以後「自動回信」比較方便。 英雄黃昏入門上手技巧上圖是回信畫面,可以要求明年老家幫忙的事項,如果要錢的話可以得到 800 金,缺老婆也可請家人介紹,但 CP 值最高的應該是索取「技能書」。 英雄黃昏入門上手技巧 WFU 第一年的運氣不錯,什麼都沒講老家就直接塞個老婆來了~~ 英雄黃昏入門上手技巧英雄黃昏入門上手技巧沒想到老婆簡直是不世出的英才,五維除了統帥少一丁點,其他四維全部屌打 WFU... 更誇張的是老婆還可以直接任職,並非只是路人無名武將,比在野武將挑半天還好用呢~ 以上就是跑了一年的遊戲示範流程,相信入門玩家至此應該對遊戲主要功能都很熟悉了,還有問題可再提出討論。
更多「英雄黃昏」相關文章:

三國志文字版策略遊戲﹍「英雄黃昏」介紹

$
0
0
三國志文字版策略遊戲﹍「英雄黃昏」介紹「英雄黃昏」是一款文字版三國策略遊戲,可扮演三國時代的一名虛構武將,類似 KOEI 三國志前幾代的武將制,但不能扮演史實武將。大致不同之處為,並非只能以統一天下為目標,隨著玩家的趣向,例如把以下成就當成目標,都可以完成遊戲:
  • 成為富豪:例如賺到 30000 金(要花不少時間,此為個人所得,非城池收入)
  • 人際成就:例如獲得配偶x1 + 子女x3 + 義兄弟x5
  • 王佐之才:輔佐某陣營統一天下(非自己作為君主統一)
  • 摸金校衛:例如成功盜墓挖寶x20
  • 暗殺刺客:例如成功刺殺武將x30
除了以上還有一些其他目標可選,算是耐完度、樂趣不少。不過玩這個遊戲有個限制──只有簡體字版(作者來自中國),目前在 Steam 以免費遊戲發行: 作者是三國迷,自學程式寫出這個免費作品,也因如此缺乏美術、影像技術層面的支援,只能以文字呈現他的構思與設計。但這不影響此作品的遊戲性,在 Steam 上已獲得一千多則壓倒性好評,我玩沒多久便入了坑,宛如另一個精神時光屋。雖然這遊戲沒有華麗的畫面,但卻是符合我磁場的策略遊戲。 (圖片出處:steam)

一、操作說明

1. 創建人物三國志文字版策略遊戲﹍「英雄黃昏」介紹遊戲一開始需建立人物,參考上圖: 簡單說的話,自創屬性最重要的是「魅力」、再來是「統帥」。此遊戲核心為結交朋友,與義兄弟、配偶一起打拼,自然是「魅力」高才交得到朋友囉。2. 攻略說明書三國志文字版策略遊戲﹍「英雄黃昏」介紹進入遊戲後,會發現約有 10 個主區塊,首次遊玩可能會覺得資訊量過大,茫然不知如何下手。所以作者提供了一份「遊戲攻略」可隨時查閱,如上圖,左下角區塊點選「貨物」欄位,使用「遊戲攻略」即可三國志文字版策略遊戲﹍「英雄黃昏」介紹文件分成七個部分,有最需要的「攻略」、「入門」,也有按鍵及關鍵遊戲要素的操作技巧。例如如何賺錢、賭場提高勝率的作法,如何結婚、生子等等。 3. 環境設定三國志文字版策略遊戲﹍「英雄黃昏」介紹右下角的「設置」可以進行許多重要設定,附帶一提,設定畫面還提供上圖紅框處的「修改器」,雖然我不太需要就是了。 提幾處我認為對操作比較方便的設定,上圖「存檔」的部分,最好勾選不要自動存檔,因為這個遊戲的特點是,「一個開局只會有一個存檔」,在同個開局不能保存多個進度之下,最好自己選擇要存檔的時機點,免得發生一些意外時卻被自動存檔。 這樣的設計或許有的玩家不適應,也許是作者為了防止玩家利用 S/L 從賭場、某些場合來進行交叉測試、或不當得利吧。不過「不能保存多個進度」也未嘗不是好事,玩家做決定之前必須更謹慎、考慮更周全,更能為自己的決策負責,玩起來會更貼近真實的「策略」遊戲。 三國志文字版策略遊戲﹍「英雄黃昏」介紹另一個重要設定是「暫停」時機,最好把大部分暫停時機都勾選(也不一定要全勾選,待上手後可自行斟酌),免得時間快速前進時,很多訊息都是一閃而過,重要資訊會漏掉沒看到,失去了進行重要行動的時機。例如一進入遊戲沒設定暫停,時間就直接過去好幾天;或是某些名將、女武將在野了,有設定暫停就能快速前往挖角4. 掛機但是這個遊戲的一個強大設計,就是可以「掛機」,如果你能完美設定所有選項,就能拍拍屁股離開螢幕,讓遊戲自動跑流程。那麼在這個情況下,就必須取消所有的暫停時機設定了。 所以如果覺得遊戲初期做政務、累積功績名望很累,可以研究一下所有的設定配置,找出最適合自己的掛機設定,讓遊戲跑幾個小時後再來接手,說不定就已經口袋滿滿,不用從頭練等了。

二、金錢

1. 金錢來源遊戲上手後,會瞭解最重要的資源就是「金錢」。有錢什麼都能買,除了裝備、道具,連五維屬性都可以買。 獲得金錢的途徑,遊戲攻略已經說明得很清楚,主要的有:
  • 領取官職俸祿、政績獎金
  • 完成年度軍令狀
  • 文鬥會、武鬥會比賽押注
  • 賭坊
  • 經商
攻略沒提到的是「家書」,初期沒錢的時候,每年可以跟老家索取 800 金,比以上任何收入都還多。 而這些途徑最重要的是「經商」,此遊戲設計了市場交易系統,操作得當可以全自動獲取穩定收益、甚至暴利,以下簡單介紹。 2. 市場交易三國志文字版策略遊戲﹍「英雄黃昏」介紹
  • A:從右上角「市場」點擊
  • B:出現「市場交易」視窗,可直接進行買入賣出
  • C:點擊「買賣託管」可設定自動化交易
  • D:此為設定選項
上圖設定的數值並非標準答案,而是需要根據現存資金多寡進行調整,有機會再另發一篇分享。

三、人際關係

前面提過遊戲核心為「結交朋友」,以下簡單介紹如何提升人際關係。 1. 拜訪從不同的場所分別可以叫出對應的武將列表,這裡以系統功能進行示範,點擊右下角「情報」→「全武將」 三國志文字版策略遊戲﹍「英雄黃昏」介紹上圖為依「武力」篩選武將的結果:
  • A:點擊武將名稱,會出現武將簡介、傳記資訊
  • B:點擊「拜訪」會出現可進行的動作,依照不同的行為有對應的成功機率,成功後會提升各自不同的交往程度
  • C:點擊「標記」可將武將加入最愛清單,這是很棒的設計,將來可縮短很多操作時間,所以盡量將高武、高智的強力武將都標記起來
2. 密切程度三國志文字版策略遊戲﹍「英雄黃昏」介紹武將標記完後,右邊選「標記武將」可顯示列表 → 接著上方欄位依「關係」篩選 → 點擊「趙雲」可看到關係為「密切」,遊戲中的關係數值為 333
  • 為何遊戲進行沒多久就跟趙雲這麼交好,可能是以他為模版的關係
  • 數值超過 300 後,進行拜訪,選擇結交義兄弟的話,成功率應該會超過 30%,可以開始試試看
  • 超過 500 的話,對方可能就會主動要求結交義兄弟了
  • 跟女武將也可以結交「義兄弟」,但「結婚」應該是更好的選項才是(如果有「內助」技能,雙方都可以增加屬性)
3. 酒館利用「拜訪」提升關係比較慢,雖然贈送物品也能提升,但初期畢竟沒錢不太可能,那麼 CP 值最高的就是「喝酒」了。 前往有「酒館」的城市,就可邀請武將喝酒,一次最多 3 位。 三國志文字版策略遊戲﹍「英雄黃昏」介紹三國志文字版策略遊戲﹍「英雄黃昏」介紹酒後可能發生各種事件,有時武將會傳授技能,關係親密的武將也可能會贈送物品,甚至跟異性武將有可能會發生一夜情... 4. 異性武將異性武將的攻略應該是最多玩家有興趣的,跟其他遊戲相比,這個遊戲的限制幾乎是最低的:
  • 在別的遊戲,已婚武將都是不能碰的,但這個遊戲已婚武將照樣可以結交、喝酒,關係到頂後甚至還會拋棄原配、主動要求結婚...
  • 如果難度選「普通」,配偶、義兄弟的數量都沒有限制,那麼要開人妻後宮完全沒有問題...
  • 生下子女後,如果有奇怪的想法,據說還是有辦法可以做到...
  • 順帶一提,如果覺得攻略異性武將很累,可以乾脆寫家書請老家直接介紹老婆~~
  • 或是乾脆整天泡青樓,久了也是會發生「贖身」事件

四、技能

1. 「技能書」概念這個遊戲的武將「技能」概念跟三國志不太一樣,是可以隨時插卡、拔卡的切換概念。前面看到的武將傳授技能事件,其實是送「技能書」給我們,將「技能書」裝備在身上就可使用該技能。 2. 取得管道根據官方攻略,以下簡單介紹技能書可取得的管道:
  • 喝酒:自己領悟或別人傳授
  • 藏經閣
  • 進行政務、戰鬥,有可能領悟
  • 拜訪武將請求傳授
  • 三個同等級的技能書,可合成一本更高段的技能書(會產生什麼技能有可能隨機)
  • 分解最高等級的技能書,可獲得技能書碎片。累積 5 個神級技能書碎片,可合成 1 個神級自選技能
3. 強力技能這篇「英雄黃昏心得」介紹了許多強力技能,可以參考看看。不過要注意的是,一些破壞遊戲平衡的技能已經被作者修改掉(例如各種「外族兵」技能)

五、道具裝備屬性

1. 裝備欄位三國志文字版策略遊戲﹍「英雄黃昏」介紹
  • 上圖左為「裝備」欄位,可放 3 組裝備(1組6個),記得把初始裝備都放上去,可以增加各種屬性,別學許褚裸衣上戰場
  • 上圖右為「技能」欄位,可放 3 組技能書(1組6個),記得書裝備上去才能學會技能
  • 按左、右箭頭即可切換 3 組欄位
因為道具、技能書最多都可存放 50 個,所以可依照需求擺不同組合。例如平常做政務時放一組「政務」相關的技能,而作戰的時候切換到另一組「戰鬥」相關的技能2. 特殊設施以下列出在各種不同的特殊設施,可以得到哪些道具裝備:
  • 書院:獲得書籍,放到「裝備」欄位可提升屬性。
  • 狩獵場:若得到肉食,食用後可恢復「體力」。
  • 釣魚台:可獲得魚肉,食用後可恢復「氣力」。
  • 鑄劍谷:打造武器/副手的地方
  • 馴馬場:馴服馬匹的地方(不同等級的馬,恢復的體力、氣力不同)
  • 軍需處:買裝備的地方
  • 藏經閣:獲得技能書的地方
3. 名望商店道具三國志文字版策略遊戲﹍「英雄黃昏」介紹點擊上方的「名望」可進入名望商店,購買各種道具。依照目前的「名望」數值,能購買的道具會受到限制。
  • 如果想要懷孕,必須買提高受孕機率的補品
  • 絕義書:如果不想被仇視的話,必須買絕義書將仇恨值歸零(通常是搶了別人老婆之後...)
  • 七星燈、還魂丹:讓武將活得久一些
  • 丹書鐵卷:就是免死金牌的意思
  • 各種套裝:可以增加不同屬性,但所費不貲,因為裝備隨機出現,要靠運氣才能買到欠缺的裝備
  • 一些破壞遊戲平衡的道具,例如「神兵符」,在難度「困難」以上無法買到
4. 命理三國志文字版策略遊戲﹍「英雄黃昏」介紹點擊右下的「命理」可提升屬性,最多可提升 20 點,但初期沒什麼錢不建議購買。如果「偉業」選「富可敵國」會送 1500 金,此時可拿一些來點「體力」、「氣力」。

六、戰鬥

相對之下,戰鬥是最輕鬆的環節,把統武高、技能強的將領通通派上場,會自動依照發動技能的機率跑完結果。 三國志文字版策略遊戲﹍「英雄黃昏」介紹曹操宛城派了 5 萬兵進攻,劉備新野率約 5 萬兵迎擊,以下欣賞雙方武將技能展示。 三國志文字版策略遊戲﹍「英雄黃昏」介紹三國志文字版策略遊戲﹍「英雄黃昏」介紹最後曹操 5 萬兵全軍覆沒,劉備軍還剩 1.5 萬。可以大致這樣總結:
  • 癱瘓、防癱瘓的技能威力最大:例如趙雲單騎(自己無敵)、突刺(麻痺敵軍多位將領),諸葛亮遁甲(閃避攻擊)、空城(麻痺敵全軍),徐庶莫言(沈默敵軍多位將領)、識破(使單一敵將無法發動技能),曹操混亂(混亂兼損兵),法正誘敵(降士氣+無法發動技能),呂蒙緩兵(降體力+麻痺),蔣濟鎮靜(全體免疫麻痺)、偽報(敵軍全部回家),程昱暗算(敵將體力歸零無法作戰)
  • 大範圍攻擊技傷害可觀:例如諸葛亮元戎弩兵,關羽水淹,周瑜火神
  • 個人強力技有機率爆擊:例如呂布秒殺(就是字面的意思)、貪狼(6倍傷害),孫策連擊(連續3次),太史慈連射(全體敵軍1~4次)
  • 扣除特殊技能傷害後,剩下來才是比拼將領的統武、兵力、士氣等戰力數值
這次戰役的結果很合理,曹操二線將領對上劉備全明星算是死傷慘重。如果雙方都是全明星,比拼的就是技能發動機率了,尤其司馬懿自帶超強的「深謀」技能(己方全體武將主動技機率提升80%),很可能劉備軍會先一步被癱瘓。

七、小地圖

這遊戲的「小地圖」功能是我最欣賞的,所有城池的重要資訊都能在地圖上一覽無遺,雖然美術效果較差,但絕對是工程師思維才會做出來的強大功能。 1. 一般狀態三國志文字版策略遊戲﹍「英雄黃昏」介紹正常情況下的小地圖畫面如上,會看到城池上標示各種文字、不同顏色的外框等等,這些都是有含意的,點擊上圖紅框的「驚嘆號」圖示會顯示詳細說明,例如:
  • 「政」代表連續3個月政績良好,「斐」代表連續6個月政績斐然,「蝗」代表蝗災
  • 紅色外框代表敵對勢力(曹操),藍色外框代表同盟勢力(劉表、馬騰)
  • 目前新野交戰中(曹操宛城進攻劉備)
2. 城市資訊三國志文字版策略遊戲﹍「英雄黃昏」介紹如果按小地圖右下角的「外出」或「遷移」,會看到小地圖上方及右方,如紅框多出一排選項,用以提示玩家切換不同資訊顯示。 三國志文字版策略遊戲﹍「英雄黃昏」介紹例如點選「兵」可顯示兵力,劉備新野周圍鄰近城池的兵力配置一目了然。 3. 特殊設施三國志文字版策略遊戲﹍「英雄黃昏」介紹小地圖右側的選項用來提示特殊設施的城池所在地,如上圖,先點選上方的「城」顯示城市名,再點選右方的「酒」,就會顯示所有酒館的所在地。 從圖中可以很清楚的看出,離新野最近的酒館為藍框標示的「宛城」、「江夏」這兩座城。 有了這個小地圖,不必翻閱攻略說明,也能立即查到所有特殊設施的位置了。

八、補充

最後說一點對這個遊戲的看法,他的遊戲性是好的、有足夠潛力,但礙於資金目前還無法處理美術的部分。做不到的部分暫且略過,先提出可以加強的點。 1. 可以加強之處
  • 整體介面:因為我已經熟悉整個介面及操作,上手後自然覺得操作順手。不過對於剛接觸的玩家,由於全部都是文字,一開始望向偌大的螢幕,容易會有茫然不知所以的感覺。如果能用美術解決最好,而若美術無法解決介面的茫然感,或許作者需要想想如何簡化介面。提供入門玩家太多選擇,常會不知如何選擇。
  • 教學關卡:如不改動介面又能讓玩家熟悉介面,最簡單的方法為提供教學模式。就像「三國志」系列提供的教學關卡,可以一步步引導玩家熟悉主要設計及操作。(附帶一提,這遊戲我第一次玩的時候,其實是有顯示教學提示的,就在「軍令狀」的區塊。然而遊戲時間過了一年多我才發現,原來那些佔用了「軍令狀」區塊的文字是教學提示,而我整個遊戲所有選項四處都翻遍了,就是找不到「軍令狀」功能,因為教學提示沒有跑完流程是不會出現「軍令狀」的...這就是畫面資訊量太大的設計缺點~~)
  • 元件設計:看得出作者花很多心思設計每個區塊,幾乎畫面上所有欄位、名詞都能點擊,可執行對應的功能。但對於入門玩家而言,不一定知道哪裡可以點擊、隱藏了什麼功能可以執行。這個部分就需要作者加強元件的設計,想辦法讓玩家不用思考,一眼就看出「這裡可以點擊喔」,以及能夠分辨「哪裡可以點、哪裡點了不會有作用」。
  • 鍵鼠操作:彈出的視窗不容易關閉,直覺會按「ESC」來關閉,但「ESC」熱鍵已被指定為離開遊戲使用。熱鍵應該以常用功能為優先,如把不常用的功能指向常按的熱鍵就比較可惜。這導致彈出視窗必須花費額外時間移動滑鼠來點擊關閉,偏偏遊戲過程常需要察看彈出視窗的內容(例如逐一拜訪武將時),建議作者可以加強這部分的使用者操作體驗。
2. 關於作者另外幫作者說點話,這遊戲已經發佈滿一年,從更新紀錄可看到作者幾乎是夙夜匪懈,極度頻繁地在更新這個遊戲(通常1~2天就有一次更新),不斷修正 bug、調整平衡性、增添新功能。一方面希望作者顧一下身體別累垮了,一方面看到如此用心地對待自己的作品,除了心有戚戚焉,我相信這遊戲將來一定可以修正成非常完善的成品。
更多「英雄黃昏」相關文章:

讓 Chrome 能自訂快速鍵(Shortkeys)﹍執行書籤、外掛、程式碼、瀏覽器操作

$
0
0
讓 Chrome 能自訂快速鍵(Shortkeys )﹍執行書籤、外掛、程式碼、瀏覽器操作過去作了不少書籤工具,例如「看 YouTube 影片不被廣告中斷」、「調整 OTT 平台字幕大小」,都是個人使用頻率高的工具。相對於滑鼠點擊書籤的操作,如果能夠按快速鍵(熱鍵)就執行書籤工具,既方便又節省操作時間。 當書籤可以自訂快速鍵後,每天會開啟多次的網頁例如「線上看電視」、PTT 等,只要熱鍵就能開啟真是太方便了。 本篇介紹的 Chrome 套件「Shortkeys 」非常強大,不但能自訂快速鍵執行書籤,幾乎想得到的瀏覽器操作行為也都能執行,甚至會寫 Javascript 的話還能一鍵跑一段程式。

一、Shortkeys 介紹

1. 官網以下為 Shortkeys 幾個重要的相關官網網址: 以上說明文件全都是英文,以下用中文提供一個簡單範例。 2. 操作說明讓 Chrome 能自訂快速鍵(Shortkeys )﹍執行書籤、外掛、程式碼、瀏覽器操作將 Shortkeys 安裝到 Chrome 後,開啟此套件的選項設定。如上圖,點擊 Shortkeys 套件圖示 → 選項 讓 Chrome 能自訂快速鍵(Shortkeys )﹍執行書籤、外掛、程式碼、瀏覽器操作依照上圖 A~E 順序新增新的快速鍵:
  • A:點擊 Add shortcut
  • B:輸入熱鍵組合,例如 ctrl+shift+s這樣的形式
  • C:Label 可自訂此熱鍵的名稱
  • D:Behavior 選擇要執行的功能,例如上圖選擇的是 Capture current viewport screenshot,代表按下快速鍵後,會對該頁面進行截圖
  • E:按 Save shortcuts 儲存即可

二、書籤設定

第一次設定書籤時忙了半天均無法生效,原來是這個套件的介面設計不夠直覺,因此有必要特別說明一下,以下提供 A、B 兩個範例。 讓 Chrome 能自訂快速鍵(Shortkeys )﹍執行書籤、外掛、程式碼、瀏覽器操作A. 執行書籤工具 首先點擊「A」下方的倒三角圖示,可展開額外設定區塊:
  • 如上圖設定好 Shortcut 快速鍵、Label 名稱
  • 執行書籤工具必須作用在同一個頁面,因此 Behavior 必須選擇「Open bookmark/bookmarklet in current tab」
  • 下方設定區塊的 Bookmark 選擇要執行的「書籤」
B. 開啟書籤網址
  • 點擊「B」下方的倒三角圖示,可展開額外設定區塊
  • 書籤網址如果想要另開視窗的話,Behavior 必須選擇「Open bookmark/bookmarklet in new tab」

三、進階說明

1. 功能整理這個套件能執行的功能非常多,設定選項下拉選單 Behavior 有這些選擇:
  • Scrolling:有各種頁面捲動的方式,例如捲到上方、下方,按 Page Down、Up 等等
  • Location:頁面切換相關功能,例如上一頁、下一頁,重整頁面、複製網址、搜尋選擇的字串等等
  • Bookmarks:書籤相關功能,可自訂書籤要開啟在哪種頁面
  • Tabs:頁籤切換功能,例如開啟、關閉、移動那個頁籤,將某個頁籤靜音等等
  • Windows:視窗相關功能,例如開啟何種視窗、全螢幕切換等等
  • Zooming:放大縮小功能
  • Miscellaneous:雜項功能,例如執行程式碼、檢視網頁原始碼、列印、截圖等等
2. 快速鍵組合如果有些組合鍵試不出來的話,不妨看看官網說明書「How To Use Shortkeys」,以下整理一些重點:
  • 可設定連續按鍵,例如熱鍵「w f」代表依序按 wf會觸發
  • 「Window」鍵在 PC 可設定字串「command」,在 Mac 可設定符號「⌘」
  • 這些是比較特殊的按鍵字串:「backspace」、「tab」、「enter」、「esc」、「space」、「up」、「home」、「pageup」...其餘可參考說明書
3. 補充說明讓 Chrome 能自訂快速鍵(Shortkeys )﹍執行書籤、外掛、程式碼、瀏覽器操作借用前面的畫面說明:
  • 如果希望在 input 輸入框也能執行熱鍵,在套件選項畫面,展開額外設定區塊後,開啟「Activation settings」
  • 如果希望熱鍵在特定網址才執行,在套件選項畫面,展開額外設定區塊後,點擊「Activation settings」下方的下拉選單進行設定
4. 執行 Javascript讓 Chrome 能自訂快速鍵(Shortkeys )﹍執行書籤、外掛、程式碼、瀏覽器操作如果會寫程式的話,上圖為範例,Behavior 選擇「Run Javascript」,展開額外設定區塊後,下方區塊 Javascript code 填入程式碼即可。

四、Chrome 套件自訂熱鍵

Chrome 套件之中,我會常常手動執行的有「倒數計時」這樣的小工具。如果想要用快速鍵啟動 Chrome 套件的話,可開啟以下頁面進行設定: 讓 Chrome 能自訂快速鍵(Shortkeys )﹍執行書籤、外掛、程式碼、瀏覽器操作如上圖,在「啟用擴充功能」處,按右邊的編輯圖示,即可設定快速鍵,將來我只要按 Ctrl + T就能執行倒數計時,不必再操作滑鼠囉。
更多 Chrome 相關套件:

排程抓證交所台股交易資料+自動寄信通知

$
0
0
排程抓證交所台股交易資料+自動寄信通知今年 2022 年初台股從高點一萬八崩盤,時至今日跌了近一年,差不多可以觀察買點。 每天打開看盤軟體、股市網頁,主動梳理資訊需花費大量時間精力。如果需要的資訊、數字,使用程式自動寄 email 通知,被動接收精準資訊花費的時間很少,有需要時再進入資料庫查閱所有紀錄過的資訊。 本篇說明如何使用排程,從證交所官方 API 抓資料,儲存於 Google 試算表資料庫,並每日自動寄通知給自己。 (圖片出處: pixabay.com)

一、證交所 API

1. 新版 API這是證交所最新版本 API 網址: 排程抓證交所台股交易資料+自動寄信通知例如想要取得「每日收盤行情-大盤統計資訊」時,如上圖,展開此項 API 內容後,點擊「Try it out」→「Execute」,可看到紅線處的 API 呼叫網址為: https://openapi.twse.com.tw/v1/exchangeReport/MI_INDEX排程抓證交所台股交易資料+自動寄信通知呼叫 API 返回的資料格式如上圖,在「Responses」區塊點擊「Model」可看到中文說明,以下為部分 json 格式的資料範例: [ {"指數":"發行量加權股價指數","收盤指數":"12946","漲跌":"-","漲跌點數":"30.66","漲跌百分比":"-0.24","特殊處理註記":""}, {"指數":"臺灣50指數","收盤指數":"9739","漲跌":"+","漲跌點數":"8.99","漲跌百分比":"0.09","特殊處理註記":""}, {"指數":"臺灣中型100指數","收盤指數":"11551","漲跌":"-","漲跌點數":"56.17","漲跌百分比":"-0.48","特殊處理註記":""}, {"指數":"未含金融指數","收盤指數":"11089","漲跌":"-","漲跌點數":"28.06","漲跌百分比":"-0.25","特殊處理註記":""}, {"指數":"未含電子指數","收盤指數":"15597","漲跌":"-","漲跌點數":"97.67","漲跌百分比":"-0.62","特殊處理註記":""}, ]2. 舊版 API以前舊的 API 有兩種呼叫網址:
  • https://mis.twse.com.tw/stock/api/
  • https://www.twse.com.tw/exchangeReport/
使用舊版 API 的缺點在於:
  • 沒有官方說明書
  • 有可能某個參數忽然不能用了
  • 有可能無預警失效
也因為沒有說明書,所以只能仰賴網路現存的網友心得分享,可參考這兩篇: 3. 最佳 API證交所最新版 API 其實不太好用,不給設定參數,強制撈回一大串資料,增加整理資料的心力。 後來發現這篇「股市API」整理的內容中,這個版本的 API「www.twse.com.tw」非常好用,根據其提供的範例「上市個股月成交資訊」,說明如下:
  • 新版 API 呼叫網址為 https://openapi.twse.com.tw/v1/exchangeReport/FMSRFK_ALL → 會撈回所有股票
  • 舊版 API 可這麼使用 https://www.twse.com.tw/exchangeReport/FMSRFK?date=20220901&stockNo=2330
    • 可加入日期參數、股票代號
    • 此網址可撈到台積電今年(2022)1~9月的月成交資訊
那麼只要 www.twse.com.tw 這個 api 還能運作,將會是爬台股資訊的最佳工具,根據以上範例就能排除大量無用資料,撈到想要的數據。

二、資料庫與寄信

使用 API 抓回資料後,需要儲存在資料庫,本篇會以「Google 試算表作為資料庫」,需使用 Google Apps Script(以下簡稱GAS)讀寫資料庫,可參考「用 Google Apps Script 操作 Google 試算表」系列文章。 使用排程抓資料的技巧、流程,可參考之前寫的「使用 Node.js 爬蟲定期抓網頁資料,結合 Google 試算表作為資料庫」,如果習慣使用 NodeJs 可參考該篇。 本篇提供的範例程式碼以 GAS 環境為主,資料存入 Google試算表後,再整理成需要的資訊格式。利用 GAS 操作 Gmail API,寄出郵件給自己,就完成了整個流程。

三、抓大盤資料範例

1. Google 試算表排程抓證交所台股交易資料+自動寄信通知首先從「Google 雲端硬碟」開個新的 Google 試算表,設定好工作表名稱、欄位名稱。 接著從選單「擴充功能」→「Apps Script」,可開始寫程式碼。 2. 程式碼範例排程抓證交所台股交易資料+自動寄信通知在 GAS 頁面的選單「編輯器」可撰寫程式,以下為「抓大盤資料」的範例: var ss = SpreadsheetApp.getActiveSpreadsheet(), index_sheet = ss.getSheetByName("大盤"), // 填入自己設定的工作表名稱 email = "xxxxx@gmail.com"; // 填入要收到通知的 email // 取得大盤成交資訊 function getIndexData() { var apiUrl = "https://www.twse.com.tw/exchangeReport/FMTQIK", // api 呼叫網址 dailyRow = [], today = new Date(), todayFormate = Utilities.formatDate(today, "GMT+8", "yyyyMMdd"), // 格式化今天日期 twYear = today.getFullYear() - 1911, // 中華民國年份 todayTwFormat = Utilities.formatDate(today, "GMT+8", twYear + "/MM/dd"), // 中華民國日期格式 todayEmailFormat = Utilities.formatDate(today, "GMT+8", "yyyy-MM-dd"), // 郵件日期格式化 fetchUrl, response, json, i, data, closeIndex, variation, volume; // 組合 api 參數, 加上今天日期 fetchUrl = apiUrl + "?date=" + todayFormate; // 呼叫 api 取得大盤成交資訊 response = UrlFetchApp.fetch(fetchUrl).getContentText(); json = JSON.parse(response); data = json.data; for (i in data) { // 只取今日資料 if (data[i][0] == todayTwFormat) { closeIndex = removeComma(data[i][4]); // 收盤指數 數字格式化 variation = removeComma(data[i][5]); // 漲跌點數 數字格式化 volume = removeComma(data[i][2]); // 成交量 數字格式化 // 整理成交量格式為(億) volume = parseInt(volume / 100000000); dailyRow = [todayEmailFormat, closeIndex, variation, volume]; } } // 如果有今日資料 if (dailyRow.length) { // 工作表增加一列資料 index_sheet.appendRow(dailyRow); // 寄信通知 sendMailIndex(dailyRow); } // 數字格式化 function removeComma(number) { return number.replace(/,/g, ""); } } // 寄信通知 function sendMailIndex(dailyRow) { var subject = "每日大盤成交資訊" + "" + dailyRow[0], // 信件標題 htmlBody = ""; // 組合信件內容 htmlBody += "日期:" + dailyRow[0] + "<br/>"; htmlBody += "收盤指數:" + dailyRow[1] + "<br/>"; htmlBody += "漲跌點數:" + dailyRow[2] + "<br/>"; htmlBody += "成交量(億):" + dailyRow[3] + "<br/>"; MailApp.sendEmail({ to: email, subject: subject, htmlBody: htmlBody }); }
  • 可參考註解文字修改參數,填入自己的 email
  • 可試著執行主程式 getIndexData()
  • 第一次執行 GAS 會要求授權,按畫面指示提供權限即可
3. 郵件通知排程抓證交所台股交易資料+自動寄信通知成功的話,會立刻收到郵件通知,效果如上圖。

四、抓個股資料範例

1. 範例程式碼以下為 GAS「抓個股資料」(台積電 2330)的範例: var ss = SpreadsheetApp.getActiveSpreadsheet(), stockNo = "2330", // 填入個股代號 index_sheet = ss.getSheetByName("2330"), // 填入自己設定的工作表名稱 email = "xxxxx@gmail.com"; // 填入要收到通知的 email // 取得個股成交資訊 function getStockData() { var apiUrl = "https://www.twse.com.tw/exchangeReport/STOCK_DAY", // api 呼叫網址 dailyRow = [], today = new Date(), todayFormate = Utilities.formatDate(today, "GMT+8", "yyyyMMdd"), // 格式化今天日期 twYear = today.getFullYear() - 1911, // 中華民國年份 todayTwFormat = Utilities.formatDate(today, "GMT+8", twYear + "/MM/dd"), // 中華民國日期格式 todayEmailFormat = Utilities.formatDate(today, "GMT+8", "yyyy-MM-dd"), // 郵件日期格式化 fetchUrl, response, json, i, data, closePrice, variation, volume; // 組合 api 參數, 加上今天日期、股票代號 fetchUrl = apiUrl + "?date=" + todayFormate + "&stockNo=" + stockNo; // 呼叫 api 取得大盤成交資訊 response = UrlFetchApp.fetch(fetchUrl).getContentText(); json = JSON.parse(response); data = json.data; for (i in data) { // 只取今日資料 if (data[i][0] == todayTwFormat) { closePrice = removeComma(data[i][6]); // 收盤指數 數字格式化 variation = removeComma(data[i][7]); // 漲跌點數 數字格式化 volume = removeComma(data[i][2]); // 成交量 數字格式化 // 整理成交量格式為(億) volume = parseInt(volume / 100000000); dailyRow = [todayEmailFormat, closePrice, variation, volume]; } } // 如果有今日資料 if (dailyRow.length) { // 工作表增加一列資料 index_sheet.appendRow(dailyRow); // 寄信通知 sendMailStock(dailyRow); } // 數字格式化 function removeComma(number) { return number.replace(/,/g, ""); } } // 寄信通知 function sendMailStock(dailyRow) { var subject = "每日 " + stockNo + "成交資訊" + "" + dailyRow[0], // 信件標題 htmlBody = ""; // 組合信件內容 htmlBody += "日期:" + dailyRow[0] + "<br/>"; htmlBody += "收盤價:" + dailyRow[1] + "<br/>"; htmlBody += "漲跌價差:" + dailyRow[2] + "<br/>"; htmlBody += "成交金額(億):" + dailyRow[3] + "<br/>"; MailApp.sendEmail({ to: email, subject: subject, htmlBody: htmlBody }); }一樣參考註解文字修改參數即可。 2. 查詢資料庫排程抓證交所台股交易資料+自動寄信通知每天收到郵件通知可瞭解當日行情,而進入試算表頁面,即可查詢歷史資料。

五、設定排程

最後一個步驟為設定排程,讓 GAS 能每日定時執行程式。 排程抓證交所台股交易資料+自動寄信通知進入 GAS 頁面,按照上圖順序設定:
  • A:點擊左側「觸發條件」圖示
  • B:按右下角「新增觸發條件」按鈕
  • C:選擇觸發的函數名稱
  • D:選擇「時間驅動」
  • E:選擇「日計時器」
  • F:選擇觸發時間,選擇 13:30 收盤以後的時間比較恰當
  • 最後按「儲存」即可
設定完成後,每日觸發時間一到,GAS 會立即執行程式,寄發郵件通知給自己。
更多 Google Apps Script 相關文章:

輕鬆當網站駭客﹍在任意網頁植入 JS/CSS 程式碼(Chrome套件)

$
0
0
輕鬆當網站駭客﹍在任意網頁植入 JS/CSS 程式碼(Chrome套件)為了避免誤解,首先對標題「駭客」一詞進行說明,這裡指的是「hacker」一詞,可參考「維基關於駭客的定義」:
  • 駭客(英語:Hacker)是指對設計、程式設計和電腦科學方面具高度理解的人
  • 在業餘電腦DIY方面,「駭客」是指研究如何修改電腦相關產品的業餘愛好者。
  • 中文音譯「駭」字總使人對駭客有所誤解,真實的駭客主要是指技術高超的程式設計師,而「劊客」(Cracker)才是專指對電腦系統及網路進行惡意破壞的人。
本篇的意思當然是指「網站 hacker」,針對某些網頁進行修改、微調、優化,而非進行破壞、竊取機密資訊等犯罪行為的「網站 cracker」。 最近在 YouTube 網站進行操作時,長期下來開始覺得某些流程過於累贅,例如我想搜尋特定關鍵字的這些影片:
  • 播放清單
  • 大於20分鐘影片
  • 直播中
  • 最新影片
總是得先跑完一次搜尋結果,然後點開「篩選器」,找到以上選項再點擊,至少得花費三個動作才能完成。而換另一個關鍵字搜尋時,又需重複以上同樣的流程,長期下來覺得浪費時間。 於是想著手對 YouTube 網頁進行客製化修改,將常用的篩選項目在搜尋前,便可在網頁上顯示出來供選擇。為了達到這個需求,找到一個不錯的 Chrome 套件,可在任意網頁植入 Javascript/CSS 程式碼,如此一來自行改造各大知名網站都成了非常簡單的事。 順外一提,本篇的內容適合前端工程師、熟悉 JS/CSS 的使用者閱讀,不適合不懂程式碼的新手操作。

一、網頁植入程式碼的作法比較

過去我針對「瀏覽器及網頁植入程式碼」做過不少工具,大部分都是書籤工具,當需要執行特定功能時,點擊書籤可立即執行程式並看到效果:
  1. 破解網頁「鎖右鍵+防複製」
  2. Emoji 表情符號輸入小幫手
  3. 看 YouTube 影片不被廣告中斷
  4. 調整愛奇藝 WeTV 芒果tv Bilibili 字幕大小
1. 適合書籤的型態以上的工具,第 2、第 3 都是有需要時才執行,並非進入特定網站後一定要執行。如果強制進入網站後總是執行,反而成效不佳,所以維持書籤的形式就好。 2. 適合進入網站立即執行的型態第一個工具「破解網頁鎖右鍵+防複製」,非常適合進入所有網站後立即執行,剛好本篇介紹的 Chrome 套件允許設定「在所有網站都執行」,所以可以從原本的書籤改用 Chrome 套件來執行。 最後一個「調整字幕大小」的功能,也是進入特定網站後便可執行,如果改用本篇的 Chrome 外掛直接將程式碼植入網站(愛奇藝 WeTV 芒果tv Bilibili),就可省去點擊書籤的動作與時間,會方便許多。 本篇客製化 YouTube 篩選器的需求,只要一進入 YouTube 網站就可執行,點擊書籤反而多了一個累贅的動作,所以還是交給 Chrome 套件自動為 YouTube 網站植入 JS/CSS 會比較方便。

二、「User JavaScript and CSS」介紹

1. 安裝 Chrome 套件輕鬆當網站駭客﹍在任意網頁植入 JS/CSS 程式碼(Chrome套件)輕鬆當網站駭客﹍在任意網頁植入 JS/CSS 程式碼(Chrome套件)安裝完畢後:
  • A:點擊 Chrome 右上角此套件圖示
  • B:點擊齒輪圖示,即可進入設定畫面
輕鬆當網站駭客﹍在任意網頁植入 JS/CSS 程式碼(Chrome套件)點擊「Add new site」即可進行操作,之後可接續「三、操作流程」。 上圖可看到我完成了兩個工具「右鍵」與「YouTube」,這裡可選擇是否「啟用/關閉」該工具。 2. 功能介紹輕鬆當網站駭客﹍在任意網頁植入 JS/CSS 程式碼(Chrome套件)選單切換到「Libraries」可選擇 JS 函式庫,上圖可看到預設載入了 jQuery 3(不需要也可移除),如果還需要引用其他函式庫,填入名稱、JS 外連網址,再按「Add new」即可。 輕鬆當網站駭客﹍在任意網頁植入 JS/CSS 程式碼(Chrome套件)選單切換到「Documentation」可看到簡單的說明書內容:
  • 網址除了可填單一網站,還能使萬用字元「星號」(*),彈性非常大
  • 說明了 JS 會等 DOM 載入後才執行,確保能讀取到頁面上的內容

三、操作流程

1. 操作說明輕鬆當網站駭客﹍在任意網頁植入 JS/CSS 程式碼(Chrome套件)接續前面點擊「Add new site」後的操作畫面:
  • A:為你的程式命名
  • B:填入程式要執行的網址,如前面提到的,可使用萬用字元
  • C:在這個區塊填入 JS 程式碼。
    • 必須稱讚一下這個編輯器,可以看得出是資深工程師的傑作
    • 輸入 JS 單字會有提示,有自動完成功能,避免輸入錯誤
    • 上圖也可看到,程式都可以收合,操作很舒服
    • 全選程式碼後還能用熱鍵 ctrl+[ctrl+]進行縮排
  • D:在這個區塊填入 CSS 碼,不需要 CSS 就不用填入
  • E:完畢後一定要點這裡的選項按鈕,勾選需要的項目,否則程式是無法執行的。
  • F:最後按「Save」大功告成
2. 執行效果輕鬆當網站駭客﹍在任意網頁植入 JS/CSS 程式碼(Chrome套件)來看看我寫的 YouTube 工具效果吧,如上圖,進入 YouTube 後就會自動出現右上角紅框處的選項按鈕。 輕鬆當網站駭客﹍在任意網頁植入 JS/CSS 程式碼(Chrome套件)直接選擇「清單」,搜尋就只會出現對應的播放清單,要搜尋「直播」也很方便。

四、應用方式

這個 chrome 外掛可以做的事太多了,就看想像力有多少了。另外提供幾個我的應用方式:
  • 前面提到的「破解網頁鎖右鍵+防複製」,只要作用網址填入 "*.*",就能在所有網站執行
  • 前面提到的「調整字幕大小」功能,由於必須在多個網站執行(愛奇藝 WeTV 芒果tv Bilibili),那麼作用網址需要填入多個網站,並用小寫逗號 ","隔開即可
  • 如果需要常常填寫某個頁面的表單(搶票?),例如姓名、電話、住址...這類繁瑣的文字,可以用這個工具寫 JS,自動填入例行性的內容,將來填表單就輕鬆了,一切自動化完成!
更多 Chrome 相關套件:

快速掌握 2023 新版 Google 登入 API﹍完整教學及實作範例

$
0
0
快速掌握 2023 新版 Google 登入 API﹍完整教學及實作範例之前寫的舊版「Google API 處理登入登出功能」,經「Google 官方公告」將於 2023/3/31 終止,如果你的網站使用了「Google API 舊版登入功能」程式碼,到了三月底就不能再運作。 Google 官方提供了將舊版程式碼移轉到新版的操作說明,本篇也會提供各種情況下的實作範例程式碼供參考。 (圖片出處: pexels.com)

一、準備動作

操作 API 之前需要先建立 Google API 專案,如果還沒建立過的話,請完成以下流程:

二、安裝 Google 預設登入按鈕

1. 說明文件以下頁面為需要瞭解的官方技術文件:
  • 從 Google 登入遷移:Google 捨棄了原有的 Sign-In API,整合到新版的 Google Identity API。如果曾使用了舊版程式碼,這個頁面列出了新舊程式碼的差異,可以根據說明來調整舊程式碼,或是乾脆全部使用新版程式碼。
  • 使用 Google JavaScript API 登入:說明如何使用 JS 操作 API,以及取得 Google 使用者帳號資料後,JWT 的編碼格式為何
由於取得的資料會經過 JWT 編碼(JSON Web Token),若不熟悉此格式的話也可參考以下網頁: 2. 安裝程式碼及範例<script src="https://accounts.google.com/gsi/client" async defer></script> <div id="g_id_onload" data-client_id="5432xxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com" data-callback="onSignIn1"></div> <div class="g_id_signin" data-type="standard"></div> 目前狀態: <span id="GOOGLE_STATUS_1"></span> <script> // 登入之後 function onSignIn1(response) { var credential = response.credential, profile = JSON.parse(decodeURIComponent(escape(window.atob(credential.split(".")[1].replace(/-/g, "+").replace(/_/g, "/"))))), // 對 JWT 進行解碼 target = document.getElementById("GOOGLE_STATUS_1"), html = ""; html += "ID: " + profile.sub + "<br/>"; html += "會員暱稱: " + profile.name + "<br/>"; html += "會員頭像:" + profile.picture + "<br/>"; html += "會員 email:" + profile.email + "<br/>"; target.innerHTML = html; } </script>
  • 紅色字串請置換為前面「處理 OAuth 憑證」流程取得的「用戶端 ID」
  • 程式碼請放在前面「處理 OAuth 憑證」流程設定的網站
以下是「官方預設 Google 登入按鈕」的範例效果,可進行操作並注意對應狀態的文字:
目前狀態: 3. 程式碼產生器如果不喜歡 Google 預設登入按鈕的效果,官方另外提供了「程式碼產生器」頁面: 快速掌握 2023 新版 Google 登入 API﹍完整教學及實作範例如上圖,可以設定外觀顏色、形狀、文字、大小、寬度等等。 以下是範例程式碼: <script src="https://accounts.google.com/gsi/client" async defer></script> <div id="g_id_onload" data-client_id="5432xxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com" data-context="signin" data-ux_mode="popup" data-callback="onSignIn2" data-auto_prompt="false"></div> <div class="g_id_signin" data-type="standard" data-shape="pill" data-theme="filled_blue" data-text="signin" data-size="large" data-logo_alignment="left"></div> 目前狀態: <span id="GOOGLE_STATUS_2"></span> <script> // 登入之後 function onSignIn2(response) { var credential = response.credential, profile = JSON.parse(decodeURIComponent(escape(window.atob(credential.split(".")[1].replace(/-/g, "+").replace(/_/g, "/"))))), target = document.getElementById("GOOGLE_STATUS_2"), html = ""; html += "ID: " + profile.sub + "<br/>"; html += "會員暱稱: " + profile.name + "<br/>"; html += "會員頭像:" + profile.picture + "<br/>"; html += "會員 email:" + profile.email + "<br/>"; target.innerHTML = html; } </script>修改參數的方式請參考前面說明,由於 Google 新版登入 API 使用官方按鈕時,HTML 元素強制使用 ID 名稱 "g_id_onload",因此一個頁面只能出現一個按鈕,此處無法再提供「程式碼產生器」的範例效果,請自行複製程式碼在自己的頁面看效果。

三、自訂登入按鈕樣式

1. 初步說明 Google 官方提供的按鈕有一定的格式與大小,雖能調整但彈性不大。如不使用官方按鈕,想要自製「登入」、「登出」的樣式,那麼就得自行處理以下:
  • 分別製作兩個按鈕
  • 分別處理兩個按鈕的點擊
需要提醒的是,此次新版 Google Identity API 文件不但沒有提供客製按鈕的操作範例,同時 API 操作也不支援客製按鈕,所以要做到完全「客製按鈕」這件事有難度。 對此事有興趣的開發人員有必要詳細研究前面提到的文件「使用 Google JavaScript API 登入」。 2. 範例程式碼以下提供一個研究成果,用「Bootstrap 按鈕 + jQuery」製作範例程式碼: <!--jQuery--> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <!--Bootstrap--> <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" /> <!--登入、登出按鈕--> <button id="GOOGLE_login" class="btn btn-large btn-primary">GOOGLE 登入</button> <button id="GOOGLE_logout" class="btn btn-large btn-warning">GOOGLE 登出</button> 目前狀態: <span id="GOOGLE_STATUS_3"></span> <script src="https://accounts.google.com/gsi/client" async defer></script> <script> function startSignIn() { google.accounts.id.initialize({ client_id: "5432xxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com", callback: onSignIn3, prompt_parent_id: "GOOGLE_login" // 設定登入視窗的位置, 若不設定此參數則預設出現在網頁右上角 }); google.accounts.id.prompt((notification) => { // 如果無法彈出登入視窗 紀錄錯誤訊息 if (notification.isNotDisplayed() || notification.isSkippedMoment()) { console.log(notification); } }); } // 處理登入取得的資訊 function onSignIn3(response) { var credential = response.credential, profile = JSON.parse(decodeURIComponent(escape(window.atob(credential.split(".")[1].replace(/-/g, "+").replace(/_/g, "/"))))), $target = $("#GOOGLE_STATUS_3"), html = ""; html += "ID: " + profile.sub + "<br/>"; html += "會員暱稱: " + profile.name + "<br/>"; html += "會員頭像:" + profile.picture + "<br/>"; html += "會員 email:" + profile.email + "<br/>"; $target.html(html); } // 點擊登入 $("#GOOGLE_login").click(function() { // 進行登入程序 startSignIn(); }); // 點擊登出 $("#GOOGLE_logout").click(function() { google.accounts.id.disableAutoSelect(); // 登出後的動作 $("#GOOGLE_STATUS_3").html("已登出"); }); </script>主要修改地方為紅字的「用戶端 ID」,也可修改點擊按鈕後要處理的 JS,其餘注意事項請參考前面範例。 下面是「自製登入登出按鈕」的範例效果,可進行操作並注意對應狀態的文字: 目前狀態: 操作「Google JavaScript API 登入」可能會遇到幾個問題: 3. One Tap 使用者體驗請參考官網說明「瞭解 One Tap 使用者體驗」,新版 Google Identity API 讓使用者可以暫時停用「Google One 登入」功能,如果彈出登入視窗時,使用者曾經按右上角的「X」圖示進行關閉,則將會有一段時間無法開啟登入功能。所以開發者在測試登入按鈕時,有可能會發生怎麼點都無法執行程式的狀況,我也是研究很久才發現此事,要等過了幾小時冷卻後才能重新執行。至於要等待多久,請見該頁面官方提供的表格整理,從 2 小時到數週都有可能。這個功能雖可提升使用者體驗,但對開發者就不太友善了,所以程式碼裡面最好加入「偵測無法彈出登入視窗」的功能,請參考官方文件,或是上面提供的範例程式碼可找到相關的註解說明。 4. oAuth 2.0請參照官方文件「遷移至 Google Identity 服務」,如果你的舊版程式碼曾經使用 gapi.auth2 模組,這模組將在 2023/3/31 之後失效,必須將程式碼改成新版模組 google.accounts.oauth2: 操作新的 API 時,必須填入 scope 範圍,如不清楚要使用什麼 scope,可參考 Google 所有 scope 一覽: 如果只是要處理登入功能,取得使用者 email、profile 等基本資料,只要加入以下 scope 即可:
  • https://www.googleapis.com/auth/userinfo.email
  • https://www.googleapis.com/auth/userinfo.profile
需要範例程式碼的話,可參考這篇「2023 使用 Google 新版 API 取得使用者個人資訊」。
更多 Google 相關文章:
Viewing all 571 articles
Browse latest View live