Microsoft 365Power AutomatePower PlatformSharePoint

【Power Automate】SharePoint上のページ・ファイルの閲覧数を取得するフロー

今回の記事では、SharePoint上の特定のページ・ファイルの閲覧数(=アクセス数・PV数)・閲覧者数(=ユニークユーザー数・UU数)を取得するフローを実装していきます。

スポンサーリンク

実現したいこと

完成イメージは次の通りです。

SharePoint上のページやファイルのURLを取得し、

  • ページのURLを取得
ページURLを取得する
  • ファイルのURLを取得
ファイルURLを取得する

取得したURLを入力してフローを実行すると、

完成イメージ(入力画面)

閲覧数・閲覧者数を含む結果がTeamsのWorkflowsチャットに届きます。

完成イメージ(結果表示画面)

ここでの「閲覧数」「閲覧者数」の定義については、下記のリンクを参照ください。
(ページ分析 / Page Analytics の情報をフローで取得します)

実装方法

手動トリガーの作成・設定

まずはトリガーを設定していきます。
今回は手動トリガーを選択し、入力項目を下記の通り設定します。

トリガー設定

※ この時、periodは「オプションのドロップダウン リストを追加する」を設定し、
startDateとendDateは「フィールドをオプションにします」を設定します

トリガー設定(ドロップダウン)
トリガーオプション設定

アクションのコピー・貼り付け

次に下記のコードをコピーします。(1行目右端のコピーボタンをご利用ください)

{"id":"87f96bfd-26d4-4f18-b8bd-3ca790d60e6c","brandColor":"#8C3900","connectionReferences":{"shared_teams":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_teams/connections/5b03efb8afa44f8f9a6baeda47eab776"}},"shared_sharepointonline":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/shared-sharepointonl-fd87a1ff-b982-4fa1-b9d6-aaaf563a5575"}}},"connectorDisplayName":"制御","icon":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=","isTrigger":false,"operationName":"スコープ(閲覧数・閲覧者数取得)","operationDefinition":{"type":"Scope","actions":{"作成(siteAddress)":{"type":"Compose","inputs":"@{first(split(triggerBody()['text'], '.sharepoint.com'))}.sharepoint.com","runAfter":{},"description":"サイトアドレス部分を抜き出します","metadata":{"operationMetadataId":"b38c74ae-2de8-49a6-90cd-371985f4a29f"}},"SharePoint_に_HTTP_要求を送信します":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_sharepointonline","operationId":"HttpRequest","apiId":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline"},"parameters":{"dataset":"@outputs('作成(siteAddress)')","parameters/method":"GET","parameters/uri":"_api/v2.1/shares/u!@{outputs('作成(encodedUri)')}/driveItem","parameters/headers":{"Accept":"application/json","Content-Type":"application/json"}},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{"作成(encodedUri)":["Succeeded"]},"description":"入力されたURLからページの詳細情報(ドライブID・アイテムID)を取得します","metadata":{"operationMetadataId":"1a93273f-0630-4805-8fdc-46857505a8cf"}},"条件":{"type":"If","expression":{"equals":["@triggerBody()['text_1']","全期間"]},"actions":{"SharePoint_に_HTTP_要求を送信します_2":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_sharepointonline","operationId":"HttpRequest","apiId":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline"},"parameters":{"dataset":"@outputs('作成(siteAddress)')","parameters/method":"GET","parameters/uri":"_api/v2.1/drives/@{outputs('SharePoint_に_HTTP_要求を送信します')?['body']['parentReference']['driveId']}/items/@{outputs('SharePoint_に_HTTP_要求を送信します')?['body']['id']}/analytics/allTime","parameters/headers":{"Accept":"application/json","Content-Type":"application/json"}},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{},"description":"日付を指定しない場合、allTime(=全期間)の閲覧数・閲覧者数を取得します","metadata":{"operationMetadataId":"1a93273f-0630-4805-8fdc-46857505a8cf"}},"HTML_テーブルの作成":{"type":"Table","inputs":{"from":["@body('SharePoint_に_HTTP_要求を送信します_2')?['access']"],"format":"HTML","columns":[{"header":"総閲覧数","value":"@item()?['actionCount']"},{"header":"総閲覧者数","value":"@item()?['actorCount']"}]},"runAfter":{"SharePoint_に_HTTP_要求を送信します_2":["Succeeded"]},"description":"取得した結果をHTMLテーブルに変換しています","metadata":{"operationMetadataId":"f16c2f0b-dc5f-4b63-a73b-b320bc31daa1"}},"チャットまたはチャネルでメッセージを投稿する":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams","operationId":"PostMessageToConversation","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"poster":"Flow bot","location":"Chat with Flow bot","body/recipient":"@{triggerOutputs()['headers']['x-ms-user-email-encoded']};","body/messageBody":"<p>【対象アイテム】</p>\n<p><a href=\"@{triggerBody()['text']}\">@{triggerBody()['text']}</a></p><br>\n<p>【閲覧数】</p>\n<p>@{body('HTML_テーブルの作成')}</p>"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{"HTML_テーブルの作成":["Succeeded"]},"description":"実行者に分析結果のTeamsチャットが届くよう設定しています","metadata":{"operationMetadataId":"469f7f30-e3e3-4f51-95e5-ed0b4429e7e6"}}},"runAfter":{"SharePoint_に_HTTP_要求を送信します":["Succeeded"]},"else":{"actions":{"SharePoint_に_HTTP_要求を送信します_3":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_sharepointonline","operationId":"HttpRequest","apiId":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline"},"parameters":{"dataset":"@outputs('作成(siteAddress)')","parameters/method":"GET","parameters/uri":"_api/v2.1/drives/@{outputs('SharePoint_に_HTTP_要求を送信します')?['body']['parentReference']['driveId']}/items/@{outputs('SharePoint_に_HTTP_要求を送信します')?['body']['id']}/getActivitiesByInterval(startDateTime='@{triggerBody()['date']}',endDateTime='@{triggerBody()['date_1']}',interval='day')","parameters/headers":{"Accept":"application/json","Content-Type":"application/json"}},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{},"description":"日付を指定した場合、指定した期間の日毎の閲覧数・閲覧者数を取得します","metadata":{"operationMetadataId":"1a93273f-0630-4805-8fdc-46857505a8cf"}},"HTML_テーブルの作成_2":{"type":"Table","inputs":{"from":"@body('SharePoint_に_HTTP_要求を送信します_3')?['value']","format":"HTML","columns":[{"header":"日付","value":"@formatDateTime(item()?['startDateTime'], 'yyyy/MM/dd')"},{"header":"閲覧数","value":"@item()?['access']?['actionCount']"},{"header":"閲覧者数","value":"@item()?['access']?['actorCount']"}]},"runAfter":{"SharePoint_に_HTTP_要求を送信します_3":["Succeeded"]},"description":"取得した結果をHTMLテーブルに変換しています","metadata":{"operationMetadataId":"b32e470f-79ed-49df-a8bc-7fdc16a21dbb"}},"チャットまたはチャネルでメッセージを投稿する_2":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_teams","operationId":"PostMessageToConversation","apiId":"/providers/Microsoft.PowerApps/apis/shared_teams"},"parameters":{"poster":"Flow bot","location":"Chat with Flow bot","body/recipient":"@{triggerOutputs()['headers']['x-ms-user-email-encoded']};","body/messageBody":"<p>【対象アイテム】</p>\n<p><a href=\"@{triggerBody()['text']}\">@{triggerBody()['text']}</a></p><br>\n<p>【閲覧数】</p>\n<p>@{body('HTML_テーブルの作成_2')}</p>"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{"HTML_テーブルの作成_2":["Succeeded"]},"description":"実行者に分析結果のTeamsチャットが届くよう設定しています","metadata":{"operationMetadataId":"37c11b01-8255-4d43-b90d-17b866896d4f"}}}},"description":"日付を指定するかどうかで分岐します","metadata":{"operationMetadataId":"6e293f79-9ffc-47f3-9408-f3f3d1dbb0c8"}},"作成(encodedUri)":{"type":"Compose","inputs":"@replace(replace(replace(base64(triggerBody()?['text']), '=', string(null)), '/', '_'), '+', '-')","runAfter":{"作成(siteAddress)":["Succeeded"]},"description":"アイテムURLをエンコードします(https://learn.microsoft.com/ja-jp/graph/api/shares-get?view=graph-rest-1.0&tabs=http)","metadata":{"operationMetadataId":"915496f0-406a-4c30-b9bb-f8b497ce259f"}}},"runAfter":{},"metadata":{"operationMetadataId":"c15ac21f-70e8-4301-8d86-01fc3cb9064b"}}}

トリガー下の「新しいステップ」ボタンを押した後、自分のクリップボードから「スコープ(閲覧数・閲覧者数取得)」を選択します。
(※表示されない場合は、「自分のクリップボード」を選択した状態でCtrl + Vを押すと表示されます)

自分のクリップボードから貼り付け

接続エラー(警告アイコン)が表示されるため、既存の接続を選択するか新しい接続を作成してください。(計5カ所あります)

接続エラー発生
再接続操作

保存が成功すれば、操作は完了です。
テストを実行してみると、閲覧数と閲覧者数が取得できたことが分かります。

完成イメージ(結果表示画面)

※ 下記のエラーが表示される場合は、Teamsアクションの「Recipient」を一度削除して「ユーザーの電子メール」を再度挿入してください。

Teamsアクションエラー
Teamsアクションエラー解消法

フローの流れ・仕組み

フローの流れ

フローの流れは下記の通りです。

フロー全体像
# アクション名動き
1作成(siteAddress)トリガーで入力されたURLからサイトアドレス部分を抜き出します
2作成(encodedUri)URLをエンコードします(詳細はこちら
3SharePoint に HTTP 要求を送信しますページ/ファイルの詳細情報(ドライブIDとアイテムID)を取得します
4SharePoint に HTTP 要求を送信します 2(分析期間が全期間の場合)全期間の閲覧数・閲覧者数を取得します
5SharePoint に HTTP 要求を送信します 3(分析期間を指定した場合)指定した期間の日毎の閲覧数・閲覧者数を取得します
6HTML テーブルの作成取得した結果をHTMLテーブル化します
7チャットまたはチャネルでメッセージを投稿する作成したHTMLテーブルをチャットで送信します
スクロールできます

特に4と5が今回のフローのポイントになります。

4. 全期間の閲覧数・閲覧者数の取得

ページ/ファイルの全期間の閲覧数・閲覧者数を取得するには、SharePointのHTTP要求アクションを使用する必要があります。
その際に利用するURIは下記形式になります。

_api/v2.1/drives/{drive-id}/items/{item-id}/analytics/allTime

今回はこれまでの手順(3)で取得しておいたドライブID・アイテムIDを使ってURIを構成しています。

全期間の閲覧数・閲覧者数を取得するHTTP要求

5. 指定した期間の閲覧数・閲覧者数の取得

ページ/ファイルの特定期間の閲覧数・閲覧者数を取得する場合にも、SharePointのHTTP要求アクションを使用する必要があります。
その際に利用するURIは下記形式になります。

_api/v2.1/drives/{drive-id}/items/{item-id}/getActivitiesByInterval(startDateTime={startDateTime},endDateTime={endDateTime},interval={interval})

こちらはドライブID・アイテムIDに加え、ユーザーが入力したstartDateとendDateを使ってURIを構成しています。

指定期間の閲覧数・閲覧者数を取得するHTTP要求

まとめ

SharePoint上の特定のページ・ファイルの閲覧数(=アクセス数・PV数)・閲覧者数(=ユニークユーザー数・UU数)を取得するフローを実装しました。

今回は「全期間」または「日単位」で閲覧数・閲覧者数を取得しましたが、応用することで時間(hour)・週(week)・月(month)での指定もできるようです。
要件に合わせてカスタマイズしてみてください。

スポンサーリンク
Hiromaru

普段からPower Platform・SharePointの技術を広めています!
デザインに力を入れて、見やすい・分かりやすい記事を投稿していきます

Hiromaruをフォローする
シェアする
Hiromaruをフォローする
タイトルとURLをコピーしました