SharePoint の REST サービスを使用してソーシャル フィードに対する読み書きを行う

REST サービスを使用して、現在のユーザーの投稿を公開し、個人フィードを取得する、SharePoint でホストされるアプリを作成します。

SharePoint REST サービスを使用して、投稿を公開し、ソーシャル フィードを取得する、SharePoint でホストされる SharePoint アドインを作成する際の前提条件

この記事では、Office 365 開発者向けサイトで Napaを使用して SharePoint アドインを作成するものとしています。 この開発環境を使用している場合は、既に前提条件を満たしています。

注:

[Office 365で SharePoint アドインの開発環境を設定する] に移動して、開発者向けサイトにサインアップして Napa の使用を開始する方法を確認します。

開発者向けサイトで Napa を使用しない場合は、以下が必要です。

  • 個人用サイトを構成済みの SharePoint、および現在のユーザー向けに作成した個人用サイト

  • Visual Studio 2012 および Office Developer Tools for Visual Studio 2013

  • ログオンしているユーザーの User Profile Service アプリケーションに対するフル コントロールのアクセス許可

注:

ニーズに合った開発環境を設定する方法のガイダンスについては、「 Office と SharePoint 用のアプリの構築を開始する」を参照してください。

SharePoint のソーシャル フィードの操作に関する中心概念

この記事で作成する、SharePoint でホストされるアプリは、JavaScript を使用して、Representational State Transfer (REST) エンドポイントに HTTP 要求を作成および送信します。 この要求によって、現在のユーザーの投稿を公開し、個人フィードを取得します。 表 1 は、作業を開始する前に理解しておく必要がある一般的な概念を説明する記事へのリンクをまとめたものです。

表 1. SharePoint ソーシャル フィードを操作するための主要な概念

記事のタイトル 説明
SharePoint アドイン
SharePoint アドインおよび、その作成に関する基本的な概念について説明しています。
SharePoint でソーシャル機能を使用した開発作業の開始
ソーシャル フィードとマイクロブログの投稿を使用したプログラミングを開始し、ユーザーやコンテンツ (ドキュメント、サイト、およびタグの.md ファイル) のフォローや、ユーザー プロファイルの操作を行う方法を説明しています。
SharePoint でのソーシャル フィードの操作
ソーシャル フィードを操作するための一般的なプログラミング作業と、そうした作業の実行に使用する API について説明しています。

SharePoint アドイン プロジェクトを作成する

  1. ] を選択します。

  2. [ SharePoint 用アプリ] テンプレートを選択して、プロジェクトに「SocialFeedREST」という名前を付けてから [ 作成] をクリックします。

  3. アプリに必要なアクセス許可を指定します。

a. ページの下部にある [プロパティ] をクリックします。

b. [プロパティ] ウィンドウで、[アクセス許可] を選択します。

c. [コンテンツ] カテゴリで、[テナント] スコープに Write 権限を設定します。

d. [ソーシャル] カテゴリで、[ユーザー プロファイル] スコープに Read 権限を設定します。

e. [プロパティ] ウィンドウを閉じます。

  1. [ スクリプト] ノードを展開して、App.js ファイルを選択し、ファイルの内容を削除します。

SharePoint REST サービスを使用して、ソーシャル フィードに投稿する

  1. App.js ファイルでは、 SocialFeedManager エンドポイントの URL 用にグローバル変数を宣言します。
var feedManagerEndpoint;
  1. 次のコードを追加します。このコードでは、クエリ文字列から SPAppWebUrl パラメーターを取得し、それを使用して SocialFeedManager エンドポイントを構築します。
  $(document).ready(function () {
    var appweburl;
    var params = document.URL.split("?")[1].split("&");
    for (var i = 0; i < params.length; i = i + 1) {
        var param = params[i].split("=");
        if (param[0] === "SPAppWebUrl") appweburl = param[1];
    }
    feedManagerEndpoint = decodeURIComponent(appweburl) + "/_api/social.feed";
    postToMyFeed();
});
  1. 次のコードを追加します。このコードでは、 /my/Feed/Post エンドポイントへの HTTP POST 要求を構築し、投稿の作成データを定義して、投稿を公開します。

    この要求では、要求本文で SocialRestPostCreationData リソースを送信します。 SocialRestPostCreationData には、投稿の対象 (この場合、現在のユーザーの最初の投稿を指定する null) および、投稿のプロパティを定義する SocialPostCreationData 複合型が含まれます。

  
function postToMyFeed() {
    $.ajax( {
        url: feedManagerEndpoint + "/my/Feed/Post",
        type: "POST",
        data: JSON.stringify( { 
            'restCreationData':{
                '__metadata':{ 
                    'type':'SP.Social.SocialRestPostCreationData'
                },
                'ID':null, 
                'creationData':{ 
                    '__metadata':{ 
                        'type':'SP.Social.SocialPostCreationData'
                    },
                'ContentText':'This post was published using REST.',
                'UpdateStatusText':false
                } 
            } 
        }),
        headers: { 
            "accept": "application/json;odata=verbose",
            "content-type":"application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: getMyFeed,
        error: function (xhr, ajaxOptions, thrownError) { 
            alert("POST error:\\n" + xhr.status + "\\n" + thrownError);
        }
    });
}

SharePoint REST サービスを使用して、現在のユーザーのソーシャル フィードを取得する

エンドポイントを使用して現在のユーザーの 個人用 フィードの種類を取得する次のコードを /my/Feed 追加します。 accept ヘッダーは、サーバーが応答でフィードの JavaScript Object Notation (JSON) 表現を返すように要求します。


function getMyFeed() {
    $.ajax( {
        url: feedManagerEndpoint + "/my/Feed",
        headers: { 
            "accept": "application/json;odata=verbose"
        },
        success: feedRetrieved,
        error: function (xhr, ajaxOptions, thrownError) { 
            alert("GET error:\\n" + xhr.status + "\\n" + thrownError);
        }
    });    
}

SharePoint REST サービスを使用して、ソーシャル フィードを反復処理して読み取る

次のコードを追加します。このコードでは、 JSON.stringify 関数および JSON.parse 関数を使用して、返されたデータを準備してから、フィードを反復処理して、スレッドの所有者および最初の投稿のテキストを取得します。


function feedRetrieved(data) {
    var stringData = JSON.stringify(data);
    var jsonObject = JSON.parse(stringData); 
 
    var feed = jsonObject.d.SocialFeed.Threads; 
    var threads = feed.results;
    var feedContent = "";
    for (var i = 0; i < threads.length; i++) {
        var thread = threads[i];
        var participants = thread.Actors;
        var owner = participants.results[thread.OwnerIndex].Name;
        feedContent += '<p>' + owner + 
            ' said "' + thread.RootPost.Text + '"</p>';
    }  
    $("#message").html(feedContent); 
}

開発者向けサイトで SharePoint 用アプリを実行する

  1. アプリを実行するには、ページの下部で [ プロジェクトの実行] ボタンをクリックします。

  2. 開いた [ Do you trust] ページで、[ Trust It] をクリックします。 アプリ ページが開き、所有者の名前が表示され、フィード内にある最初の投稿のそれぞれについてテキストが表示されます。

コード例: SharePoint REST サービスを使用して、現在のユーザーの投稿を公開し、フィードを取得する

App.js ファイルの完全なコード例を次に示します。 投稿を発行し、現在のユーザーの個人用フィードを取得します。これは JSON オブジェクトとして返されます。 次に、フィードを反復処理します。


var feedManagerEndpoint;

// Get the SPAppWebUrl parameter from the query string and build
// the feed manager endpoint.
$(document).ready(function () {
    var appweburl;
    var params = document.URL.split("?")[1].split("&amp;");
    for (var i = 0; i < params.length; i = i + 1) {
        var param = params[i].split("=");
        if (param[0] === "SPAppWebUrl") appweburl = param[1];
    }
    feedManagerEndpoint = decodeURIComponent(appweburl)+ "/_api/social.feed";
    postToMyFeed();
});

// Publish a post to the current user's feed by using the 
// "<app web URL>/_api/social.feed/my/Feed/Post" endpoint.
function postToMyFeed() {
    $.ajax( {
        url: feedManagerEndpoint + "/my/Feed/Post",
        type: "POST",
        data: JSON.stringify( { 
            'restCreationData':{
                '__metadata':{ 
                    'type':'SP.Social.SocialRestPostCreationData'
                },
                'ID':null, 
                'creationData':{ 
                    '__metadata':{ 
                        'type':'SP.Social.SocialPostCreationData'
                    },
                'ContentText':'This post was published using REST.',
                'UpdateStatusText':false
                } 
            } 
        }),
        headers: { 
            "accept": "application/json;odata=verbose",
            "content-type":"application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: getMyFeed,
        error: function (xhr, ajaxOptions, thrownError) { 
            alert("POST error:\\n" + xhr.status + "\\n" + thrownError);
        }
    });
}

// Get the current user's feed by using the 
// "<app web URL>/_api/social.feed/my/Feed" endpoint.
function getMyFeed() {
    $.ajax( {
        url: feedManagerEndpoint + "/my/Feed",
        headers: { 
            "accept": "application/json;odata=verbose"
        },
        success: feedRetrieved,
        error: function (xhr, ajaxOptions, thrownError) { 
            alert("GET error:\\n" + xhr.status + "\\n" + thrownError);
        }
    });    
}

// Parse the JSON data and iterate through the feed.
function feedRetrieved(data) {
    var stringData = JSON.stringify(data);
    var jsonObject = JSON.parse(stringData); 
 
    var feed = jsonObject.d.SocialFeed.Threads; 
    var threads = feed.results;
    var feedContent = "";
    for (var i = 0; i < threads.length; i++) {
        var thread = threads[i];
        var participants = thread.Actors;
        var owner = participants.results[thread.OwnerIndex].Name;
        feedContent += '<p>' + owner + 
            ' said "' + thread.RootPost.Text + '"</p>';
    }  
    $("#message").html(feedContent); 
}

次の手順

ソーシャル機能へのアクセスに使用できる他の REST エンドポイントについては、「 SharePoint のソーシャル フィード REST API リファレンスと「SharePoint のユーザーとコンテンツの REST API リファレンスのフォロー 」を参照してください。

関連項目