কোনও ব্যবহারকারী আমার ফেসবুক পৃষ্ঠা বা ফেসবুকের এপিআই ব্যবহার করে ইউআরএল পছন্দ করে কিনা তা পরীক্ষা করে দেখুন


102

আমার মনে হয় আমি পাগল হয়ে যাচ্ছি আমি এটি কাজ করতে পারি না।
আমি সহজেই পরীক্ষা করতে চাই যে কোনও ব্যবহারকারী আমার iFrameঅ্যাপ্লিকেশনটিতে জাভাস্ক্রিপ্ট সহ আমার পৃষ্ঠা পছন্দ করেছে কিনা ।

FB.api({
    method:     "pages.isFan",
    page_id:        my_page_id,
},  function(response) {
        console.log(response);
        if(response){
            alert('You Likey');
        } else {
            alert('You not Likey :(');
        }
    }
);

এটি প্রত্যাবর্তন করে: মিথ্যা
তবে আমি আমার পৃষ্ঠার একজন অনুরাগী তাই কি এটি সত্য হওয়া উচিত নয় ?!


উত্তর:


101

আমি এটার উপরেও আমার চুল ছিঁড়ে ফেলেছি। আপনার কোডটি কেবল তখনই কার্যকর হয় যদি ব্যবহারকারী আদর্শ নয় এমনটির জন্য বর্ধিত অনুমতি মঞ্জুর করে।

এখানে অন্য পদ্ধতি।

সংক্ষেপে, আপনি যদি OAuth 2.0ক্যানভাসের জন্য উন্নত বিকল্পটি চালু করেন তবে ফেসবুক $_REQUEST['signed_request']আপনার ট্যাব অ্যাপ্লিকেশনটিতে অনুরোধ করা প্রতিটি পৃষ্ঠা সহ একটি প্রেরণ করবে । আপনি যদি সেই স্বাক্ষরিত_পরিষ্কারটি পার্স করেন তবে ব্যবহারকারী পৃষ্ঠাটি পছন্দ করেছেন কি না তা সহ আপনি কিছু তথ্য পেতে পারেন।

function parsePageSignedRequest() {
    if (isset($_REQUEST['signed_request'])) {
      $encoded_sig = null;
      $payload = null;
      list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
      $sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
      $data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
      return $data;
    }
    return false;
  }
  if($signed_request = parsePageSignedRequest()) {
    if($signed_request->page->liked) {
      echo "This content is for Fans only!";
    } else {
      echo "Please click on the Like button to view this tab!";
    }
  }

12
সতর্কতা: "আপত্তিজনক" করার চেষ্টা করার আগে ফেসবুকের প্রচারমূলক গাইডলাইনগুলি পড়ুন যেমন প্রতিযোগিতার প্রবেশের জন্য পৃষ্ঠাটির মতো। "# 3 আপনাকে প্রচারের নিবন্ধকরণ বা প্রবেশের প্রক্রিয়া হিসাবে ফেসবুক বৈশিষ্ট্য বা কার্যকারিতা ব্যবহার করবেন না example উদাহরণস্বরূপ, কোনও পৃষ্ঠা পছন্দ করা বা কোনও জায়গায় চেক ইন করার কাজটি কোনও প্রচারের অংশগ্রহণকারীকে স্বয়ংক্রিয়ভাবে নিবন্ধন বা প্রবেশ করতে পারে না।" - ফেসবুক
ক্রিস জ্যাকব

1
আমি যে বস্তুটি ফিরে এসেছি সে থেকে পৃষ্ঠাগুলি সম্পত্তি পাচ্ছি না এই পদ্ধতিটি কি আর সম্ভব নয়?
কেসি ফ্লিন 14

17
@ ক্রিস - কেবল স্পষ্ট করে বলতে চেয়েছিলেন, আপনি প্রথমে পৃষ্ঠা পছন্দ করে এন্ট্রি শর্ত করতে পারেন। পছন্দ করার কাজটি প্রবেশের প্রক্রিয়া হতে পারে না তবে প্রবেশের আগে আপনি পছন্দটি প্রয়োগ করতে পারেন enforce
অ্যাডাম পেডলি

4
@ অ্যাডাম - আপনার ব্যাখ্যাটি সঠিক। ফেসবুক অ্যাপ্লিকেশনগুলিকে সামগ্রীতে "লাইক গেট" অ্যাক্সেসের অনুমতি দেয়। উদাহরণস্বরূপ - এটি অনুমোদিত: "প্রতিযোগিতায় প্রবেশের ফর্মটি দেখতে আমাদের পছন্দ করুন"। এবং এটি অনুমোদিত নয়: "আমাদের মত এবং আপনি স্বয়ংক্রিয়ভাবে আমাদের প্রতিযোগিতায় প্রবেশ করবেন" into
ক্রিস জ্যাকব

3
আপনি এর বৈধতা পরীক্ষা করছেন না signed_request। এটি একটি বিপজ্জনক পদ্ধতির। আপনার আবেদনের গোপনীয়তার বিরুদ্ধে এটি পরীক্ষা করা উচিত। আরও তথ্যের জন্য এই উত্তরটি দেখুন
ifaau

19

আপনি (পিএইচপি) ব্যবহার করতে পারেন

$isFan = file_get_contents("https://api.facebook.com/method/pages.isFan?format=json&access_token=" . USER_TOKEN . "&page_id=" . FB_FANPAGE_ID);

এটি তিনটির মধ্যে একটি ফেরত দেবে:

  • স্ট্রিং সত্য স্ট্রিং মিথ্যা জেসন
  • টোকেন থাকলে ত্রুটির ফর্ম্যাট প্রতিক্রিয়া
  • বা পেজ_আইডি বৈধ নয়

আমি অনুমান করি যে এটি অর্জনের একমাত্র অব্যবহৃত-টোকেন উপায়টি সাইন পোস্ট করা হয়েছে_জ্যাকশন সিফরিং সদ্য পোস্ট করেছেন। আমার সহায়ক পিএইচপি এসডিকে ব্যবহার করে:

function isFan(){
    global $facebook;
    $request = $facebook->getSignedRequest();
    return $request['page']['liked'];
}

17

আপনি এটি জাভাস্ক্রিপ্টে এর মতো করতে পারেন ( @ বামন এর অনুরূপ প্রশ্নের প্রতিক্রিয়া বন্ধ করে ):

<html>
  <head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <style type="text/css">
      div#container_notlike, div#container_like {
        display: none;
      }
    </style>
  </head>
  <body>
    <div id="fb-root"></div>
    <script>
      window.fbAsyncInit = function() {
        FB.init({
          appId      : 'YOUR_APP_ID', // App ID
          channelUrl : 'http(s)://YOUR_APP_DOMAIN/channel.html', // Channel File
          status     : true, // check login status
          cookie     : true, // enable cookies to allow the server to access the session
          xfbml      : true  // parse XFBML
        });

        FB.getLoginStatus(function(response) {
          var page_id = "YOUR_PAGE_ID";
          if (response && response.authResponse) {
            var user_id = response.authResponse.userID;
            var fql_query = "SELECT uid FROM page_fan WHERE page_id = "+page_id+"and uid="+user_id;
            FB.Data.query(fql_query).wait(function(rows) {
              if (rows.length == 1 && rows[0].uid == user_id) {
                console.log("LIKE");
                $('#container_like').show();
              } else {
                console.log("NO LIKEY");
                $('#container_notlike').show();
              }
            });
          } else {
            FB.login(function(response) {
              if (response && response.authResponse) {
                var user_id = response.authResponse.userID;
                var fql_query = "SELECT uid FROM page_fan WHERE page_id = "+page_id+"and uid="+user_id;
                FB.Data.query(fql_query).wait(function(rows) {
                  if (rows.length == 1 && rows[0].uid == user_id) {
                    console.log("LIKE");
                    $('#container_like').show();
                  } else {
                    console.log("NO LIKEY");
                    $('#container_notlike').show();
                  }
                });
              } else {
                console.log("NO LIKEY");
                $('#container_notlike').show();
              }
            }, {scope: 'user_likes'});
          }
        });
      };

      // Load the SDK Asynchronously
      (function(d){
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
      }(document));
    </script>

    <div id="container_notlike">
      YOU DON'T LIKE ME :(
    </div>

    <div id="container_like">
      YOU LIKE ME :)
    </div>

  </body>
</html>

যেখানে আপনার সার্ভারে চ্যানেল এইচটিএমএল ফাইলটিতে কেবল লাইন রয়েছে:

 <script src="//connect.facebook.net/en_US/all.js"></script>

সেখানে একটি সামান্য কোড সদৃশ, কিন্তু আপনি ধারণা পাবেন। এটি প্রথমবার যখন ব্যবহারকারী পৃষ্ঠাটি দেখার জন্য লগইন ডায়লগটি পপ আপ করবে (যা একেবারে আদর্শ নয় তবে কাজ করে)। পরবর্তী পরিদর্শনগুলিতে কিছুই আপ পপ আপ করা উচিত।


জাভাস্ক্রিপ্ট ২.7 এসডিকে এটি অবহিত করা হয়েছে
কমল কুমার

হাই @ ডিঞ্জাজ আপনার উত্তরের জন্য ধন্যবাদ উপরের কোডটি ফেসবুকের জন্য ভাল কাজ করছে। ইনস্টাগ্রাম, টুইটার এবং লিংকডন
শিবশঙ্কর এম

@ শিভাশঙ্কারম আমার সত্যতার কোন ধারণা নেই। আমি এই উত্তরটি পোস্ট করার পর থেকে আমাকে এর মতো কিছু করতে হয়নি।
দিনজাস

16

যদিও এই পোস্টটি বেশ কিছু সময়ের জন্য এখানে রয়েছে তবে সমাধানগুলি খাঁটি জেএস নয়। যদিও জেসন উল্লেখ করেছে যে অনুমতিগুলির জন্য অনুরোধ করা আদর্শ নয়, তবে আমি এটিকে একটি ভাল বিষয় হিসাবে বিবেচনা করি কারণ ব্যবহারকারী এটিকে স্পষ্টভাবে প্রত্যাখ্যান করতে পারেন। আমি এখনও এই কোডটি পোস্ট করি, যদিও (প্রায়) একই জিনিসটি অন্য পোস্টে আইফাউর দ্বারাও দেখা যেতে পারে । বিশদে খুব বেশি মনোযোগ না দিয়ে এটিকে জেএসের একমাত্র সংস্করণ বিবেচনা করুন।

মূল কোডটি বরং সহজ:

FB.api("me/likes/SOME_ID", function(response) {
    if ( response.data.length === 1 ) { //there should only be a single value inside "data"
        console.log('You like it');
    } else {
        console.log("You don't like it");
    }
});

বিকল্পভাবে, meঅন্য কারওর যথাযথ ইউজারআইডি দিয়ে প্রতিস্থাপন করুন (এটি করার জন্য আপনাকে নীচের অনুমতিগুলি পরিবর্তনের প্রয়োজন হতে পারে friends_likes) যেমন উল্লেখ করা হয়েছে, আপনার প্রাথমিক অনুমতিের চেয়ে আরও বেশি প্রয়োজন:

FB.login(function(response) {
    //do whatever you need to do after a (un)successfull login         
}, { scope: 'user_likes' });

3

আমি যখন ব্যবহারকারী পছন্দ মতো বোতাম টিপেন তখন ডেটা প্রেরণে jquery ব্যবহার করি।

<script>
  window.fbAsyncInit = function() {
    FB.init({appId: 'xxxxxxxxxxxxx', status: true, cookie: true,
             xfbml: true});

                 FB.Event.subscribe('edge.create', function(href, widget) {
$(document).ready(function() { 

var h_fbl=href.split("/");
var fbl_id= h_fbl[4]; 


 $.post("http://xxxxxx.com/inc/like.php",{ idfb:fbl_id,rand:Math.random() } )

}) });
  };

</script>

দ্রষ্টব্য: আপনি আপনার বাটন আইডি আইডি পেতে কিছু লুকানো ইনপুট পাঠ্য ব্যবহার করতে পারেন আমার ক্ষেত্রে আমি এটি url থেকে নিজেই "var fbl_id = h_fbl [4] এ নিয়েছি;" আইডির উদাহরণ রয়েছে তার চেয়েও উদাহরণ: url: http://mywebsite.com/post/22/some-tittle

সুতরাং আমি আইডিটি পেতে ইউআরএলকে পার্স করব এবং তারপরে লাইক.এফপি ফাইলে এটি আমার ডেটাবেসে .োকান। এই পদ্ধতিতে আপনাকে কেউ যদি লাইক বোতাম টিপ দেয় কিনা তা জানতে অনুমতি চাইতে হবে না, তবে আপনি কে এটি টিপতে চান তা জানতে চাইলে অনুমতিগুলির প্রয়োজন হয়।


1
যদি তারা আপনার অ্যাপ্লিকেশনটির সাথে সংযুক্ত না হন তবে এটিই একমাত্র উপায়
কেভিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.