Office Graph からドキュメントの取得

少し前ですが、ブログに「SharePoint の「最近使ったドキュメント」の取得」という内容を投稿しました。これと、その前に投稿した「Office Graph とグラフ クエリ言語と REST API と」を組み合わせて、Office Delve で表示する内容と同様のものをスクリプト エディター Web パーツを利用して SharePoint サイト上に表示します。
ハッキリ言って、検索で投げるクエリーさえわかれば余裕です。

スクリプト エディター Web パーツを利用して SharePoint サイト上に JSON 形式で取得して表示しましょう。

  1. (必要に応じて) SharePoint サイトを作成
  2. ページの編集画面から、[挿入] – [メディアおよびコンテンツ] – [スクリプト エディター] でスクリプト エディター Web パーツを挿入
    image_thumb1
  3. Web パーツの編集から、[タイトル] に「最近使ったドキュメント」、[枠の種類] に「タイトルのみ」 を選択後に Web パーツが表示された箇所に表示された [スニペットを編集] をクリックし、下記に示すコードを入力して、SharePoint ページを保存したら完了です
    image_thumb3
    delve_parts_thumb[2]

今回のコードのポイントは以下の通りです。

  • テナント名は、各自のテナント名に変更してください。
  • 検索条件は、SharePoint 用アプリの「Mavention Office Graph Query Tester」をインストールして利用すれば、すぐに判明します
  • 検索パラメータ RowLimit で、取得する件数を制限しています
  • JSON 形式で取得すると、各プロパティは検索結果の PrimaryQueryResult.RelevantResults.Table.Rows に各ドキュメントが、PrimaryQueryResult.RelevantResults.Table.Rows[n].Cells に各ドキュメントの管理プロパティが管理プロパティごとに入っているので、管理プロパティ名に応じて利用しています
  • JavaScript ライブラリはパフォーマンス向上を目的に CDN から取得しています

実際のコードを以下で紹介します。

//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js
//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js

function addFigure(str) {
var num = new String(str).replace(/,/g, “”);
while(num != (num = num.replace(/^(-?\d+)(\d{3})/, “$1,$2”)));
return num;
}

jQuery.ajax({
url: “https://テナント名.sharepoint.com/_api/search/query?Querytext='(*) AND (FileExtension:doc OR FileExtension:docx OR FileExtension:ppt OR FileExtension:pptx OR FileExtension:xls OR FileExtension:xlsx OR FileExtension:pdf)’&Properties=’EnableLegacySPOGraph:true,TitleBasedSummaries:true,GraphQuery:AND(ACTOR(ME\\,action\\:1021)\\,ACTOR(ME\\,OR(action\\:1021\\,action\\:1036\\,action\\:1037\\,action\\:1039))),GraphRankingModel:action\\:1021\\,weight\\:1\\,edgeFunc\\:weight\\,mergeFunc\\:max’&SelectProperties=’Author,AuthorOwsUser,DocId,DocumentPreviewMetadata,Edges,EditorOwsUser,FileExtension,FileType,HitHighlightedProperties,HitHighlightedSummary,LastModifiedTime,LikeCountLifetime,ListID,ListItemID,OriginalPath,Path,Rank,SPWebUrl,SecondaryFileExtension,ServerRedirectedURL,SiteTitle,Title,ViewCountLifetime,ViewsRecent,siteID,uniqueID,webID’&RankingModelId=’0c77ded8-c3ef-466d-929d-905670ea1d72’&RowLimit=10&StartRow=0&ClientType=’PulseWeb’&BypassResultTypes=true”,
type: “GET”,
headers: {“Accept”: “application/json; odata=nometadata”},
cache:false,
success: function(data){
var items = [];

$(data.PrimaryQueryResult.RelevantResults.Table.Rows).each(function (i, e) {
var o = {};

$(e.Cells).each(function (ii, ee) {
if (ee.Key == ‘Title’)
o.title = ee.Value;
else if (ee.Key == ‘Author’)
o.author = ee.Value;
else if (ee.Key == ‘Path’)
o.path = ee.Value;
else if (ee.Key == ‘FileExtension’)
o.fileextension = ee.Value;
else if (ee.Key == ‘FileType’)
o.filetype = ee.Value;
else if (ee.Key == ‘HitHighlightedSummary’)
o.hithighlightedsummary = ee.Value;
else if (ee.Key == ‘LastModifiedTime’)
o.lastmodifiedtime = ee.Value;
else if (ee.Key == ‘ServerRedirectedURL’)
o.serverredirectedurl = ee.Value;
else if (ee.Key == ‘SiteTitle’)
o.sitetitle = ee.Value;
else if (ee.Key == ‘Size’)
o.size = ee.Value;
else if (ee.Key == ‘ViewCountLifetime’) {
if (ee.Value == null)
o.viewcountlifetime = “0”;
else
o.viewcountlifetime = ee.Value;
o.viewcountlifetime = addFigure(o.viewcountlifetime);
}
else if (ee.Key == ‘ViewsRecent’) {
if (ee.Value == null)
o.viewsrecent = “0”;
else
o.viewsrecent = ee.Value;
o.viewsrecent = addFigure(o.viewsrecent);
}
});

if (o.filetype != null)
o.iconurl = ‘https://テナント名.sharepoint.com/_layouts/images/ic’ + o.filetype + ‘.gif’;
else
o.iconurl = ‘https://テナント名.sharepoint.com/_layouts/images/ic’ + o.fileextension + ‘.gif’;

items.push(‘ ‘ +
‘ + o.title + ‘ (直近 ‘ + o.viewsrecent + ‘ | 合計 ‘ + o.viewcountlifetime + ‘)

‘);
})

$(“.delveDocsInfo”).html(items.join(”))
}
});

前回の投稿「SharePoint の「最近使ったドキュメント」の取得」と同様に、戻ってくる情報さえわかれば console.log(data); で出力して、Internet Explorer の開発者モードで確認すれば OK です。
image_thumb[3]

この方法さえわかってしまえば、検索条件で絞りこんで、PowerPoint ドキュメントだけを表示したり、特定の SharePoint サイトのドキュメントだけを表示することが可能であるなど、利用用途はかなり広がります。
ドキュメントをどんどん Office 365 (SharePoint Online、Exchange Online、Yammer、OneDrive for Business など) に置きましょう。そうするだけで、機械学習によって、今、あなたが見るべきドキュメントが、あなたの元に届きます!

SharePoint の「最近使ったドキュメント」の取得

ノルウェーの Mikael Svenson さんが、ブログで面白い投稿を行っているので、少し深堀りしてみました。簡単に書くと、SharePoint Online 上の OneDrive for Business ライブラリ上に表示される「最近使ったドキュメント」 (自分自身が最近参照した Office ドキュメント) をどうやって API で取得するか、というものです。ここには、以下の URL で取得できる、と記載があり、実際に試したところ、確かにデータが取得できました。

https://<テナント名&gt;.sharepoint.com/_api/me/getrecentdocs

注意 : 私自身が探した限りでは、TechNet ライブラリや MSDN ライブラリには記載が見られなかったので、いつでも利用できるとは思わない方がいいです。サポートへ問い合わせるも難しいので、自己責任の範囲で、ちょっとした確認に留めた方がいいかもしれません。

JSON 形式か XML 形式で取得できるということなので、スクリプト エディター Web パーツを利用して SharePoint サイト上に JSON 形式で取得して表示しましょう。

  1. (必要に応じて) SharePoint サイトを作成
  2. ページの編集画面から、[挿入] – [メディアおよびコンテンツ] – [スクリプト エディター] でスクリプト エディター Web パーツを挿入
    image
  3. Web パーツの編集から、[タイトル] に「最近使ったドキュメント」、[枠の種類] に「タイトルのみ」 を選択後に Web パーツが表示された箇所に表示された [スニペットを編集] をクリックし、下記に示すコードを入力して、SharePoint ページを保存したら完了です
    image
    image

実際のコードは以下の通りです。<テナント名> は、各自のテナント名に変更してください。
JSON 形式で取得すると、IconUrl にアイコンの URL、FileName にファイル名、LinkLocation にドキュメントの URL が入っているので、そのまま利用しているだけです。JavaScript ライブラリは CDN から取得していますが、SharePoint サイト コレクション内などにアップロードして参照しても問題ないです。

<script type=”text/javascript” src=”//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js”>
</script>
<script type=”text/javascript” src=”//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js”>
</script>
<script type=”text/javascript”>
jQuery.ajax({
url: “https://<テナント名&gt;.sharepoint.com/_api/me/getrecentdocs”,
type: “GET”,
headers: {“Accept”: “application/json;odata=verbose”},
cache:false,
success: function(data){
var items = [];
var loopcount = 10;
var num = 1;
$(data.d.results).each(function(){
items.push(‘<img src=”‘ + this.IconUrl + ‘”> ‘ +
‘<a href=”‘ + this.LinkLocation + ‘”>’ + this.FileName + ‘</a></p>’);
num++;
if (num > loopcount) {return false;}
});
$(“.recentDocsInfo”).html(items.join(”))
}
});
</script>
<div class=”recentDocsInfo”></div>

戻ってくる情報さえわかれば、簡単コーディングです。戻ってくる情報は、開発ツールを利用してもいいですが、この程度なら console.log(data); で出力して、Internet Explorer の開発者モードで確認すれば OK です。楽々 LaTeX…もとい楽々 SharePoint!!

image

Office Graph とグラフ クエリ言語と REST API と

Office Delve とは

先日より、Office 365 ユーザーに「Office Delve」と呼ばれる、会社の上司や同僚の仕事ぶりから、ユーザー自身が、今、最も関心があると思われる情報を見つけるためのツールが提供されています。

Office Delve とは
https://support.office.com/ja-JP/Article/Office-Delve-%e3%81%a8%e3%81%af-1315665a-c6af-4409-a28d-49f8916878ca?ui=ja-JP&rs=ja-JP&ad=JP

Office Delve と Office Graph

Office Delve は、「Office Graph」と呼ばれるユーザーやドキュメントなどのエンタープライズ オブジェクトに関する関係性や相互作用を含めた情報を蓄積し、提供する仕組みを利用しています。

Office Graph と GQL と REST API

Office Delve を利用せずに Office Graph を利用する方法の一つとして、Office Graph に対して「グラフ クエリ言語 (Graph Query Language; GPL)」を利用して、「SharePoint 検索 REST API」で情報を取得する、という方法があります。

詳細な利用方法は MSDN を参照してもらいたいですが、Office 365 のテナントが利用可能な状態で、以下の URL を Web ブラウザに入力して実行すると、Office Delve にアクセスした際に表示される情報と同じものが XML 形式で表示されます!

http://<テナント名&gt;.sharepoint.com/_api/search/query?querytext=’*’&properties=’GraphQuery:ACTOR(ME\, action\:1020),GraphRankingModel:{“features”\:[{“function”\:”EdgeWeight”}]}’&rankingmodelid=’0c77ded8-c3ef-466d-929d-905670ea1d72′

グラフ クエリ言語 (GQL) を SharePoint Online 検索 REST API で使用して Office Graph にクエリを実行する
http://msdn.microsoft.com/ja-jp/library/office/dn783218(v=office.15).aspx

簡単に GQL を試すには

SharePoint 2013 の検索機能の確認にはお世話になっている人も多い「SharePoint 2013 Search Query Tool」の最新版 (v2.2) で、この GQL の実行に対応していますので、是非、最新版を利用してみてください。

SharePoint 2013 Search Query Tool
https://sp2013searchtool.codeplex.com/

image

最後に

Office Graph を利用したアプリケーションとしては、GitHub にサンプル コードもあるので、参考にするといいでしょうね。

Developing Apps against the Office Graph – Part 2
http://blogs.msdn.com/b/richard_dizeregas_blog/archive/2014/09/17/developing-apps-against-the-office-graph-part-2.aspx