DHJJ [Hatsune's Journal Japan] blog

Hatsune's Journal Japan blog

目次

Blog 利用状況

ニュース

最新ツイート

運営サイト

Hatsune's Journal Japan
DHJJ

著作など

資格など

OCP
MCP

書庫

日記カテゴリ

わんくま同盟

[Azure]Microsoft Azure Mobile ServicesでFacebookに投稿する

Microsoft Azrue Mobile Servicesでは、Microsoftアカウント、Facebook、Google、Twitterなどを認証寄稿として利用できます。

Facebook認証を選択した場合、そこで取得したアクセストークンを使ってカスタムAPIからFacebookに自動投稿することができます。

AEDオープンデータプラットフォームにてbetaテスト中の更新機能もこの機能を使って位置情報を登録、更新したときにFacebookに自動投稿をして(あとは、SendGrid使ってメールも飛ばして)います。このように操作履歴をSNSに投稿することで、位置情報の収集に貢献している人の見える化、そして、いたずらの発見と戻しがスムーズに行えるように考慮されています。

つまり、Facebookの自動投稿をクライアント側ではなく、Mobile Services側に実装することで投稿を回避するような迂回ができなくなるわけです。

 

Facebookにアプリを登録

Facebookを認証機構として使う場合は次のようにします。

image

Facebookに開発者登録を行い、アプリ登録を行います。

Microsoft Azrue Mobile Services側でFacebook認証を行うのならば、ここでは「ウェブサイト」として登録してMobile Servicesに作成したサービスのURLを登録します。

FacebookアプリをMobile Servicesに登録

Facebookにアプリを登録するとアプリケーションIDとアプリのシークレットキーが生成されますので、これをMobile Servicesに登録します。

image

カスタムAPIにアクセス制限をかける

image

アクセス制限をかけたいカスタムAPIのメソッドに対して「認証されたユーザーのみ」を設定します。

 

この設定によりFacebook認証を行わずにGETしようとすると次のようなエラーが発生します。

image

 

認証を通してアクセス制限がかかったカスタムAPIメソッドを実行する

Windows Azrue Mobile Services側でFacebook認証を行うためには、Mobile Services SDKを使ってクライアント側で次のコードを実行します。

await mobileService.LoginAsync(MobileServiceAuthenticationProvider.Facebook);

 

このコードを実行すると自動的にFacebookのログイン画面がSDKにより表示されます。

image

 

FacebookのIDとパスワードを入れて[ログイン]をクリックして成功すれば、アクセス制限のかかったカスタムAPIにアクセスできます。

カスタムAPI

それでは最後にFacebookに投稿するためのカスタムAPIについてみていきましょう。

exports.post = function(request, response) {
    PostFacebook(request,'UPDATE',response);
};

function PostFacebook(request,mode,response,results)
{
    var user = request.user;
    var LocationName = request.body.LocationName;
    var FacilityPlace = request.body.FacilityPlace;
    var VenueId = request.body.VenueId
    user.getIdentities({
        success: function(identities) {
            if (identities.facebook) {
                var req = require('request').defaults({strictSSL: true});
                var fbAccessToken = identities.facebook.accessToken;
                var providerId = user.userId.substring(user.userId.indexOf(':') + 1);;
                var userName = "";
                var userLink = "";
                /* get user info */
                { 
                    var uri = 'https://graph.facebook.com/' + providerId + '?access_token=' + fbAccessToken;
                    req(uri, {json: true},function(err,resp,body) {
                        if (err) {
                            console.error('Error sending data to FB Graph API: ', err);
                            response.send(statusCodes.INTERNAL_SERVER_ERROR);
                        } else {
                            if (resp.statusCode !== 200)
                            {
                                console.error(JSON.stringify(body));
                                response.send(statusCodes.INTERNAL_SERVER_ERROR);
                            } else {
                                userName = body.name;
                                userLink = body.link;
                                /* post feed for Facebook page */
                                if (userName.length > 0)
                                {
                                    var message = "posted:" + userName + " " + userLink + "\n"; 
                                    message = message + mode + ":" + LocationName;
                                    if (FacilityPlace) {
                                        message = message + " " + FacilityPlace + "\n";
                                    }
                                    message = message + "\n";
                                    if (VenueId) {
                                        message = message + " https://ja.foursquare.com/v/" + VenueId;  
                                    }  
                                    var uri = 'https://graph.facebook.com/614536118659766/feed';
                                    req.post(uri, {
                                        form: {
                                            message: message,
                                            access_token: fbAccessToken
                                        },
                                        json: true
                                    }, function(err,resp,body) {
                                        if (err) {
                                            console.error('Error sending data to FB Graph API: ', err);
                                            response.send(statusCodes.INTERNAL_SERVER_ERROR);
                                        } else {
                                            /*if (resp.statusCode !== 200 && resp.statusCode !== 506)
                                            {
                                                if (mode == "INSERT")
                                                {
                                                    InsertData(request,response);    
                                                } else {
                                                    UpdateData(request,response);    
                                                }
                                                console.error(JSON.stringify(body));
                                                response.send(statusCodes.INTERNAL_SERVER_ERROR);
                                            } else {
                                            }
                                            */
                                            if (mode == "INSERT")
                                            {
                                                InsertData(request,response);    
                                            } else {
                                                UpdateData(request,response);    
                                            }
                                        }
                                    });
                                } else {
                                    response.send(statusCodes.BAD_REQUEST);
                                }
                            }
                        }
                    });
                }
            }
        },
        error : function()
        {
            response.send(statusCodes.INTERNAL_SERVER_ERROR);
        }
    });
}

 

このカスタムAPIを呼び出せば、更新時には次のような投稿が自動的にFacebookページに送られます。image

以上

投稿日時 : 2014年12月17日 0:59

Feedback

# ブライトリング時計コピー 2016/02/04 23:25 j2uu4bj685

http://www.bestevance.com/rolex/ladie/index.htm
スーパーは時計をコピーしますブランド偽物、偽物ブランド、ルイヴィトンコピー、 ロレックスコピー、シャネルコピー、グッチコピー、エルメスコピー、 ボッテガヴェネタコピー、 バーバリーコピー、ミュウミュウコピー、トリーバーチコピー、バレンシアガコピー、ディオールコピー、ブルガリコピー、ブラダコピー、 ドルチェ&ガッバーナコピー、オメガコピー、フランク ミュラーコピー、gagaコピー。 }}}}}}

# カルティエ loveリング 2017/03/11 3:55 qhufrfgrekx@msn.com

ルイヴィトン - N級バッグ、財布 専門サイト問屋
弊社は販売LOUIS VUITTON) バッグ、財布、 小物類などでございます。
弊社は「信用第一」をモットーにお客様にご満足頂けるよう、
送料は無料です(日本全国)! ご注文を期待しています!
下記の連絡先までお問い合わせください。
是非ご覧ください!
激安、安心、安全にお届けします.品数豊富な商
商品数も大幅に増え、品質も大自信です
100%品質保証!満足保障!リピーター率100%!

# オメガ 2017/06/29 18:32 tscmvnci@docomo.ne.jp

日本的な人気と信頼を得ています。
安心、安全にお届けします
価格、品質、自信のある商品を取り揃えておりますので、
当店の主要な経営のブランド:ヴィトン シャネル ロレックスなど.
当店は主に経営する商品:かばん.バッグ .財布 .キーケース. .腕時計など.
日本には無い商品,日本では高価な商品,弊社のない商品,取引先を代理して製造会社を連絡することができる.
弊社長年の豊富な経験と実績があり.輸入手続も一切は弊社におまかせできます.ご希望の商品を責任を持ってお届けします.
当店の商品は特恵を与える。興味あれば、是非ご覧下さい
財布、腕時計、バッグ一品市場

# エルメスコピー 2017/08/10 17:53 ojrtzxkdb@msn.com

※―※―※ブランド靴人気大活躍※―※―※
老店開業顧客は至上N品物の専門の商店
送★料無★料★〓
■2017年■最新作品も登場。
┣カルティエ
┣クロムハーツ
┣ロレックス
┗ヴィトンコピー
●ブランド服●ブランド靴●ブランドバッグ●
◆高品質。国際速達郵便発送。安心 。最低価格保証。
_|☆|_|送|_ |料|_|☆|無|_|料_|☆|_|( ^_^ )(日本全国)
◆歓迎光臨★送料無料
◆ご安心購入くださいませ。
◆ご注文を待ちしております
◆よろしくお願いいたします_(._.)_
エルメスコピー http://www.newkokoku.com

# ルイヴィトン 激安アクセサリー通販 2017/09/23 7:08 hxcbzjlyi@livedoor.com

ルイヴィトン - N級バッグ、財布 専門サイト問屋
弊社は販売LOUIS VUITTON) バッグ、財布、 小物類などでございます。
弊社は「信用第一」をモットーにお客様にご満足頂けるよう、
送料は無料です(日本全国)! ご注文を期待しています!
下記の連絡先までお問い合わせください。
是非ご覧ください!
激安、安心、安全にお届けします.品数豊富な商
商品数も大幅に増え、品質も大自信です
100%品質保証!満足保障!リピーター率100%!

# ルイヴィトン偽物 2017/10/09 15:25 pkvwem@ezwen.ne.jp

とても丁寧な梱包がされていました。
ヴァンクリーフ&アーペルの立派な保証書も付いていました。
商品も新品のような状態で大満足です。
商品覧に上代(参考価格)があると
より満足度が高くなると思いますが。
これからもこちらを利用したいと思います。

# シャネルバッグコピー 2017/10/17 9:19 egejjozsax@live.jp

超人気クリスチャンルブタンクリスチャンルブタン通販超N品シューズ超N品

# 韓国コピー 2017/10/26 7:48 kdhvxze@excite.co.jp

ルイヴィトン - N級バッグ、財布 専門サイト問屋
弊社は販売LOUIS VUITTON) バッグ、財布、 小物類などでございます。
弊社は「信用第一」をモットーにお客様にご満足頂けるよう、
送料は無料です(日本全国)! ご注文を期待しています!
下記の連絡先までお問い合わせください。
是非ご覧ください!
激安、安心、安全にお届けします.品数豊富な商
商品数も大幅に増え、品質も大自信です
100%品質保証!満足保障!リピーター率100%!

# ブランド最新情報 2017/11/09 18:03 agitxs@hotmail.co.jp

この度は大変気持のよいお取引をさせていただき、とても嬉しく感謝します。またよろしくお願いします。ありがとうございました。(*^‐^*)
☆送料無料☆新品SAランク【送料無料】★BVLGARI ブルガリ★B-zero1/ビー・ゼロワンリング★Ref.AN191025★4バンド/M★750(K18YG)イエローゴールド★サイズ49★131003020★【質屋出店】【新品】
とてもよい買い物
この度は大変気持のよいお取引をさせていただき、とても嬉しく感謝します。またよろしくお願いします。ありがとうございました。(*^‐^*)

# Wonderful beat ! I would like to apprentice whilst yyou amend yoᥙr web site, һow can i subscribe for a weblog website? Тhe account aided me a applicable deal. Ӏ have been a littⅼe bіt familiar οf thhis your broadcast offered vivid ⅽlear concept 2019/07/09 16:31 Wonderful beat ! I would likе to aprentice whilst

Wonderful beat ! Ι would like to apprentice whilst you amend y?ur web site, ?ow can i subscribe fоr a weblog website?
Тhe account aided me a applicable deal. ? hаve beеn а little
b?t familiar of thi? youг broadcast offered vivid c?ear concept

# ブランド通販店 2019/09/17 3:47 Georgefipse

弊社は各ランクのブランド商品満載し、ブランド通販店で一番信用のある店なので!。
品質はこちらが間違いなく保証します。
https://www.ginzaoff.com

■取扱ブランド ロレックス時計コピー、カルティエ時計コピー、IWC時計コピー、
ブライトリング時計コピー、パネライ時計コピー.
◆ スタイルが多い、品質がよい、価格が低い、実物写真!
◆ ご入金頂いてから最速4日、遅くとも7日程度でご指定場所へ発送出来る予定でございます
◆ 商品送料を無料にいたします

◆信用第一、良い品質、低価格は 私達の勝ち残りの切り札です。
◆ 当社の商品は絶対の自信が御座います。
◇ N品質 シリアル付きも有り 付属品完備!

◆ 必ずご満足頂ける品質の商品のみ販売しております。
◇ 品質を最大限本物と同等とする為に相応の材質にて製作している為です。
◆ 絶対に満足して頂ける品のみ皆様にお届け致します。

興味あれば、是非一度サイトをご覧になって下さい。
今後ともよろしくご愛顧くださいますよう、お願い申し上げます
https://www.ginzaoff.com
お取り引きを開始させていただきたく思います。
詳細に関してはどうぞお気軽にご連絡ください。

# グッチバッグ/財布/新作 2022/09/30 2:10 zalsoigkkki@ybb.ne.jp

ディオール時計偽物
弊社主要取扱商品 :ブランドバッグコピー品、ブランド財布コピー品。
ルイヴィトン コピー品、シ,ャネル コピー品、グッチ コピー品,
エルメスコピー品、バレンシアガコピー品があります。
おしゃれな大人の女性にすごく人気があります。
これを持っているだけで人目を引くこと間違いなし!!
美しいフォルムは気品と風格が世界のセレブを魅了して止みません。
是非この機会にご入札ください.
グッチバッグ/財布/新作 https://www.nawane111.com/hermes-bag.htm

タイトル
名前
Url
コメント