PowerAutomateによるフロー作成をしていると、SharePointにも触れる機会が増えます。そしてその逆もまた然りです。
いずれもO365に統合され、PowerAutomateはMicrosoft社が展開するPowerPlatformを構成する製品として組織の業務効率化の基軸、SharePointはTeamsのチームと連動して作成されるチームサイトの機能を提供して組織のニュースやファイルの管理の基軸となるからです。
Problem
ところで、PowerAutomateで提供されているSharePoint系のアクションはいろいろありますが、SPOで構築されたサイトの利用状況(アクセス情報)を取得するためのアクションは今のところ提供されていません。
それでは以下のような情報を取得するにはどうしたらよいのでしょうか?
- あるニュース(ページ)のPVやUU
- あるニュースの「いいね」数やコメント数
- あるサイト全体のPVやUU
Solution
"SharePointにHTTP要求を送信します" を利用して、SPOが公開するWebAPIから情報を取得します。
実のところ後述の「URI」の内容は、私自身、他の記事を参考にしつつトライ&エラーで行き着いたもので、「どうしてこうなる?」「過不足がないか?」という質問にはお答えすることができません・・・。
あるニュース(ページ)のPVやUU
まずニュースやページ個別のPV・UUの取得方法です。
- 「サイトのアドレス」には情報収集対象のサイトを設定します。
- 「方法」は「GET」です。
- 「URI」には
_api/search/query?querytext='path:https://www.example.com/path/to/site/SitePages (IsDocument:True OR contentclass:STS_ListItem)'&sortlist='ViewsRecent:descending'&selectproperties='Title,ViewsLast7Days,ViewsLast7DaysUniqueUsers,ViewsLastMonths1,ViewsLastMonths1Unique,ViewsLastMonths2,ViewsLastMonths2Unique,ViewsLastMonths3,ViewsLastMonths3Unique,ViewsLifetime,ViewsLifetimeUniqueUsers,Path'&RowLimit=1000&trimduplicates=false
という要領でPV・UUを取得するためのクエリを記載します。 -
www.example.com/path/to/site
の箇所は情報取得対象サイトのURLを指定してください。 - 「ヘッダー」は
Accept
のapplication/json;odata=verbose
を記入します。
ViewsLast7Days
や ViewsLast7DaysUniqueUsers
という項目名には集計対象期間に応じて多くのバリエーションがあり、こちらのブログ記事 でそれらをまとめてくれています。
末尾に Unique
や UniqueUsers
が付く項目が期間ごとのUUで、それ以外が期間ごとのPVです。
あるニュースの「いいね」数やコメント数
続いて、ニュースやページ個別の「いいね」数やコメント数の取得方法です。
- 「サイトのアドレス」や「方法」「ヘッダー」は先ほどと同じです。
- 「URI」には 「いいね」数の場合
_api/web/lists/GetByTitle('サイトのページ')/items(id)/likedBy?$inlineCount=AllPages
を指定します。 - コメント数の場合は
_api/web/lists/GetByTitle('サイトのページ')/items(id)/Comments?$expand=replies,likedBy,replies/likedBy&$inlineCount=AllPages
を指定します。 - いずれの場合も
id
には "複数の項目の取得" アクションで取得できるページのIDを指定します。
あるサイト全体のPVやUU
最後に、あるサイト全体のPVやUU(サイト単位のPVやUU)の取得方法です。
- 「サイトのアドレス」や「方法」「ヘッダー」は先ほどと同じです。
- 「URI」には
_api/v2.1/sites/siteId/oneDrive.getActivitiesByInterval?startDateTime=dateTimeA&endDateTime=dateTimeB&interval=day
を指定します。 -
dateTimeA
とdateTimeB
にはISO8601形式(例:2021-11-15T03:00:34.1163617Z
)で取得対象期間の日時を指定します。 -
interval
にはhour
やweek
やmonth
も指定できるようです。 -
siteId
には取得対象サイトのIDを指定します。サイトのIDはこちらの記事で解説してくれているように3つの文字列をカンマで連結したかたちになっています。例えばexmaple.sharepoint.com,07a6be8b-aaaa-bbbb-cccc-0411a6d6ab61,152d6fdc-aaaa-bbbb-cccc-c2b941d2f797
というように。 - 対象サイトのIDを知るために私が採った方法は、「サイトの利用状況」ページをブラウザで開き、そのページの表示時に行われているAjaxリクエストの宛先URLを確認するという方法でした。泥臭すぎて恥ずかしい。。
WebAPIから返されるJSONの中で actionCount
がPV、 actorCount
がUUです。