[Windows][Store] Search API

當我們要透過程式查詢 Windows Store 上的資訊時 (例如檢查 app 是否還在架上),就會需要用到 Search/Store API。

雖然 Windows Store 目前 (2014-11) 並未對外正式提供這類 API,不過利用 Fiddler 側錄 “市集 (Store)" 的網路存取,還是可以找到後端 web service 的呼叫方式。

search-api/fiddler_store_traffic.png
Figure 1. 側錄在市集裡搜尋關鍵字所引發的網路存取
Tip 要在 Windows 8 上側錄 store apps 的網路存取,可以參考 Configure Fiddler for Windows 8 Metro-style applications
GET https://next-services.apps.microsoft.com/search/6.3.9600-0/776/zh-TW_zh-TW/m/TW/c/TW/il/zh-TW/cp/10005001/query/cid/0/pf/1/pc/0/pt/x64/af/0/lf/0/s/0/2/pn/0/pgc/-1?phrase=facebook HTTP/1.1
Connection: Keep-Alive
Accept: */*
Authorization: t=EwCQApVABAAUxtsk...
User-Agent: Windows Store/1.0
MUID: 60b88dd54dafaf317270e1b541eb0afe
Host: next-services.apps.microsoft.com

也就是說,透過下面這個 URL,就可以用關鍵字 KEYWORD 查詢 Windows Store 上的 apps:(系統地區的設定在台灣)

https://next-services.apps.microsoft.com/search/6.3.9600-0/776/zh-TW_zh-TW/m/TW/c/TW/il/zh-TW/cp/10005001/query/cid/0/pf/1/pc/0/pt/x64/af/0/lf/0/s/0/2/pn/0/pgc/-1?phrase=<KEYWORD>

把系統的地區設定的位置改成美國後,再做一次查詢則是透過下面這個 URL:

https://next-services.apps.microsoft.com/search/6.3.9600-0/776/zh-TW_zh-TW/m/TW/c/US/il/zh-TW/cp/10005001/query/cid/0/pf/1/pc/0/pt/x64/af/0/lf/0/s/0/2/pn/0/pgc/-1?phrase=<KEYWORD>

兩相對照之下,可以推導出 URL 的結構如下:

https://next-services.apps.microsoft.com/search/6.3.9600-0/776/<LANG>_<LANG>/m/<COUNTRY>/c/<COUNTRY>/il/<LANG>/cp/10005001/query/cid/0/pf/1/pc/0/pt/x64/af/0/lf/0/s/0/2/pn/0/pgc/-1?phrase=<KEYWORD>

其中:

以搜尋 Facebook 為例,會得到下面的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<rslt>
   <Ptl>
      <AC>1000</AC> <!-- 查詢結果的筆數 -->
      <PN>0</PN>
      <Ig>19270317147145f9a11209db92b5e963</Ig>
      <AppNS>Search.0</AppNS>
      <Scn>Search</Scn>
      <Fil>
         <Fi>IPE3:DEFAULT-IPE3</Fi>
      </Fil>
      <Pts>
         <Pt> <!-- 1 -->
            <I>add3d66a-358d-4fe2-be68-8a3f934e9ea1</I> <!-- App ID -->
            <R>dc15d94e-7788-49a6-bb2d-00e4550ba2c5</R>
            <B>dc15d94e-7788-49a6-bb2d-00e4550ba2c5</B>
            <Pfn>Facebook.Facebook_8xx8rvfyw5nnt</Pfn>
            <L>en-us</L> <!-- 語言 -->
            <T>Facebook</T> <!-- App 名稱 -->
            <D>Keeping up with your friends is easier than ever with the official Facebook app.</D> <!-- 說明 -->
            <Wr>12</Wr>
            <Ico>dc15d94e-7788-49a6-bb2d-00e4550ba2c5/Icon.243565.png</Ico>
            <Bg>#3B5998</Bg>
            <Fg>light</Fg>
            <Sr>3.6</Sr>
            <Src>1670</Src>
            <Cs>NT$</Cs>
            <Cc>TWD</Cc>
            <P>0.00</P>
            <C>
               <I>5</I>
               <N>社交</N>
            </C>
            <K>4</K>
            <Try>false</Try>
            <Dev>Facebook, Inc.</Dev>
            <DevI>985157116974358</DevI>
            <Typ>1</Typ>
            <Acc>false</Acc>
            <Dca>false</Dca>
            <Ds>15931</Ds>
            <Ats>
               <At>
                  <N>Facebook</N>
                  <Bg>#3B5998</Bg>
                  <Fg>light</Fg>
                  <Mai>App</Mai>
                  <Logo>dc15d94e-7788-49a6-bb2d-00e4550ba2c5/AppTile.2.243565.244330.png</Logo>
                  <Imgs>
                     <Img>
                        <T>1</T>
                        <U>dc15d94e-7788-49a6-bb2d-00e4550ba2c5/AppTile.1.243565.244330.png</U>
                     </Img>
                     <Img>
                        <T>3</T>
                        <U>dc15d94e-7788-49a6-bb2d-00e4550ba2c5/AppTile.3.243565.244330.png</U>
                     </Img>
                  </Imgs>
               </At>
            </Ats>
            <Sss>
               <Ss>
                  <U>dc15d94e-7788-49a6-bb2d-00e4550ba2c5/Screenshot.243565.100000.jpg</U>
                  <Cap>News Feed</Cap>
               </Ss>
            </Sss>
         </Pt>
      </Pts>
   </Ptl>
   <navigator pageSize="40" hitCount="1000" PagiCode="" /> <!-- 2 -->
   <quality hasResult="True" />
</rslt>
1 每一個 <Pt> 都表示一個 app,透過 App ID 可以用來識別特定 app。
2 預設會列出前面 40 筆資料。

除了 /search 之外,還有 /browse 可以查看 app 的細節,之後再做介紹。

廣告

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s