[黑客人生] 查詢手機的助聽器相容性評級 (HAC Rating)

與本文相關的腳本源碼下載、說明、議題回報等,請移駕至 JediLin/Mobile-phones-HAC-data-table-generator 源碼倉儲。

很久以前曾經介紹過 GARI (Global Accessibility Reporting Initiative) 網站可以用來查詢行動電話的各項親和力功能,包括助聽器相容性評級(HAC Rating,這是由美國聯邦通訊委員會所要求的規格規範,採用 ANSI C63.19 美國國家標準程序進行測試所得到的結果)。然而 GARI 網站上的資料非常豐富,若只想查詢助聽器相容性評級反而不很方便,幸好 GARI 網站直接把整個資料庫(每日更新!)依創用 CC「姓名標示—非商業性—禁止改作」3.0 版授權條款釋出提供下載,讓我們能夠把所有資料都下載到自己的電腦上,再進行篩選及利用。

從 GARI 下載到的資料庫檔案為 XML (eXtensible Markup Language) 格式,直接檢索並不容易,但是利用一點點 XML 技術,我們可以如下撰寫 XSL (eXtensible Stylesheet Language) 樣式檔案:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
    <head>
    <link rel="Stylesheet" href="mobile-accessibility-phones.css" type="text/css" />
    <title>HAC Rating</title>
    </head>
    <body>
      <table>
      	<thead>
      	  <tr><th>Brand</th><th>Model</th><th>HAC Rating</th></tr>
      	</thead>
      	<tbody>
          <xsl:for-each select="rss">
            <xsl:for-each select="channel">
              <xsl:for-each select="product">
                <tr>
      	          <td><xsl:value-of select = "ProductBrand" /></td>
      	          <td><xsl:value-of select = "Model" /></td>
                  <td>
                    <xsl:for-each select="item">
                      <xsl:if test="Feature='HAC Rating'">
                        <xsl:value-of select = "Detail" />
                      </xsl:if>
      	            </xsl:for-each>
      	          </td>
                </tr>
              </xsl:for-each>
            </xsl:for-each>
          </xsl:for-each>
        </tbody>
      </table>
    </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

以及如下的 CSS (Cascading Style Sheets) 樣式檔:

table thead th, table tbody td {
  padding: 5px;
}
table tbody tr:nth-child(2n) td {
  background: #ffcccc;
}
table tbody tr:nth-child(2n+1) td {
  background: #ccffff;
}

最後只要在下載得到的 mobile-accessibility-phones.xml 檔案加入一列:

<?xml-stylesheet type="text/xsl" href="mobile-accessibility-phones.xsl"?>

如此就可以篩選出只有廠牌、型號、助聽器相容性評級等三項資訊的表格,能夠很容易搜尋手機型號進行查詢,而且日後下載更新的資料庫後也可以沿用已經準備好的 XSL 樣式檔及 CSS 樣式檔,只要插入前述那一列⸺這個步驟可以直接寫在下載處理的腳本裡,不用每次都手動進行,例如以下這樣的更新批次檔(我用了 wgetPerl):

:start
IF EXIST "mobile-accessibility-phones.xml" (
  del /F /Q mobile-accessibility-phones.bak.xml
  copy /Y mobile-accessibility-phones.xml mobile-accessibility-phones.bak.xml
)

:download
wget --output-document=mobile-accessibility-phones.xml http://gari.info/xml/mobile-accessibility-phones.xml

IF EXIST "mobile-accessibility-phones.xml" (
  GOTO cont
) ELSE (
  GOTO download
)

:cont
perl -i.bak -pe "s|<\?.+\?>|<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>\r<\?xml-stylesheet type=\"text\/xsl\" href=\"mobile-accessibility-phones.xsl\"\?>|;" mobile-accessibility-phones.xml

IF EXIST "mobile-accessibility-phones.xml" (
  del /F /Q mobile-accessibility-phones.xml.bak
  GOTO end
) ELSE (
  copy /Y mobile-accessibility-phones.xml.bak mobile-accessibility-phones.xml
  del /F /Q mobile-accessibility-phones.xml.bak
  GOTO cont
)

:end
del /F /Q *.
exit

當然既然準備好批次處理的腳本,就可以放進工作排程器,讓它每天自動更新,確保自己電腦上永遠有最新版本可以使用。註:上面這段腳本沒有檢查網路斷線的情況,所以還是要注意一下;我目前偷懶的方式是放到 Dropbox 資料夾內,萬一出事產生空白檔案,我還有辦法手動回溯到稍早的版本。

我以 2020/06/22 取得的資料為例,處理好的結果如 mobile-accessibility-phones-20200622.xml(約 19 MB!建議使用桌面版本瀏覽器,請參見後面段落說明),有興趣的人不妨親自看看成果如何。

效果若滿意,我把處理好的檔案放在 GitHub 上的 JediLin/Mobile-phones-HAC-data-table-generator 源碼倉儲,歡迎自由下載使用(或者若不滿意,也很歡迎提出意見,或者自己編修調整)。

值得注意的是,iOS 或 iPadOS 上的瀏覽器無法解譯 XML/XSL 檔案,另外若把所有檔案都下載到本地端也有可能因為安全性因素而無法套用 XSL 樣式檔。前者的解決辦法當然就是改用其他作業系統的設備,後者最簡單的方法則是利用 MiniWebSimple HTTP Server 之類的簡易版本地端網頁伺服器來取用檔案。

jedi.org: