SharePoint を利用していると、「よく見られているお知らせ」を表示したいなどの要望が出てくることがあります。一見すると、SharePoint ではそうした数値をカウントしていないように見えますが、実は「検索」の機能の一部として、これまで見られた回数や、今回のテーマとしている「過去 2 週間に見られた回数」を値として持っています。

今回は、その数値や対象となるアイテムを取り出す REST API について書きたいと思います。この REST API は、SharePoint Server 2013 や SharePoint Online でも利用可能です。

さっそく REST API

さっそくですが、特定のリストに含まれるアイテムの内、過去 2 週間に見られた回数が多いアイテムを取得するための REST API の記述は下記のようになります。このサンプルでは、コンテンツタイプが「お知らせ」のアイテムのみを 5 件取得するようになっています。取得できた情報を基に「人気お知らせランキング!」などを作成するイメージですね。

http(s)://<Site Path>/_api/search/query?querytext='path:http(s)://<List Path>/'&sortlist='ViewsRecent:descending'&refinementfilters='contentclass:equals(\"STS_ListItem_Announcements\")'&selectproperties='Title,Path,FileExtension,ViewsRecent,contentclass'&rowlimit=5

このような URL を作成し、GET で要求すると(ブラウザのアドレスバーに入れてアクセスしても OK) XML が返ってきます。多くの場合、JavaScript などから呼び出し、JSON でデータを取れたほうが嬉しいでしょうから、その場合は要求ヘッダーに "accept": "application/json;odata=verbose" を指定します。

分解してみる

最初にある query までは、SharePoint の検索 REST API のエンドポイントですね。

http(s)://<Site Path>/_api/search/query

次に出てくる querytext に path としてリストの URL を指定して、値を取得する範囲を決めます。

querytext='path:http(s)://<List Path>/'

検索 REST API から取得したアイテムには、それぞれ ViewsRecent という名前で「過去 2 週間に見られた回数」がプロパティとしてありますので、sortlist を利用して ViewsRecent の値で並び替えします。

sortlist='ViewsRecent:descending'

リストの中には、フォルダーなどのランキング作成に不要と考えられるアイテムもありますので、「お知らせ」のリスト アイテムのみが取得できるように refinementfilters を利用してコンテンツ タイプでフィルターします。

refinementfilters='contentclass:equals("STS_ListItem_Announcements")'

検索 REST API では、取得した各アイテムに対して多くのプロパティが返ってきます。通信量を減らしたり、その後の処理で扱いやすいように、取得するプロパティを selectproperties を利用して指定します。これを指定しない場合は、全プロパティが返ってきます。

selectproperties='Title,Path,FileExtension,ViewsRecent,contentclass'

最後に、取得するアイテムの上限数を rowlimit で指定しています。ランキング表示を作成仕様とした場合、まあ、5 件とか 10 件でしょうか。

rowlimit=5

さいごに

本当は「過去 1 週間」などの範囲で取れるともっと嬉しいのですが、標準の仕組みでは 2 週間単位でしか集計されていないようです。ただ、他のユーザーがどんなお知らせを見ているかが分かると、「自分も見てみようかな」といった動機になったり、「あ!見逃してた!」といった気づきにもなりますね。

もっと詳しく知りたい!という場合には、MSDN をご確認ください。

SharePoint 検索 REST API の概要
https://msdn.microsoft.com/ja-jp/library/office/jj163876.aspx