ফেসবুক গ্রাফ এপিআই v2.0 + - / আমি / বন্ধুরা খালি ফিরে আসে, বা কেবল আমার বন্ধুরা যারা আমার অ্যাপ্লিকেশন ব্যবহার করে


366

আমি গ্রাফ API v2.0 দিয়ে আমার বন্ধুর নাম এবং আইডিগুলি পাওয়ার চেষ্টা করছি, তবে ডেটা খালি ফিরে আসে:

{
  "data": [
  ]
}

যখন আমি v1.0 ব্যবহার করছিলাম, নিম্নলিখিত অনুরোধের সাথে সবকিছু ঠিক ছিল:

FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
                                              NSDictionary* result,
                                              NSError *error) {
    NSArray* friends = [result objectForKey:@"data"];
    NSLog(@"Found: %i friends", friends.count);
    for (NSDictionary<FBGraphUser>* friend in friends) {
        NSLog(@"I have a friend named %@ with id %@", friend.name, friend.id);
    }
}];

তবে এখন আমি বন্ধু পেতে পারি না!


একটি সম্ভাব্য এই সমস্যার পরাস্ত stackoverflow.com/a/25584013/2529087
java.quaso

উত্তর:


627

গ্রাফ এপিআই-এর v2.0-এ কল করা /me/friendsসেই ব্যক্তির বন্ধুদের ফিরিয়ে দেয় যারা অ্যাপ্লিকেশনটি ব্যবহার করে।

এছাড়াও, ভি ২.০-এ, আপনাকে অবশ্যই user_friendsপ্রতিটি ব্যবহারকারীর কাছ থেকে অনুমতি চাইতে হবে। user_friendsপ্রতিটি লগইনে ডিফল্টরূপে আর অন্তর্ভুক্ত থাকে না। প্রতিটি ব্যবহারকারীর user_friendsপ্রতিক্রিয়া উপস্থিত হতে অনুমতি প্রদান করতে হবে /me/friends। দেখুন ফেসবুক আপগ্রেড নির্দেশিকা আরো বিস্তারিত তথ্যের জন্য, অথবা নীচের সারসংক্ষেপ পর্যালোচনা করুন।

আপনি যদি অ্যাপ্লিকেশন-ব্যবহার না করা বন্ধুদের একটি তালিকা অ্যাক্সেস করতে চান তবে দুটি বিকল্প রয়েছে:

  1. আপনি যদি আপনার লোকদের তাদের অ্যাপগুলিকে ফেসবুকে প্রকাশিত গল্পগুলিতে তাদের বন্ধুদের ট্যাগ করতে দিতে চান তবে আপনি/me/taggable_friends এপিআইব্যবহার করতে পারেন। এই শেষ পয়েন্টটির ব্যবহারের জন্য ফেসবুকের পর্যালোচনা প্রয়োজন এবং কেবলমাত্র সেই ক্ষেত্রে ব্যবহার করা উচিত যেখানে আপনি কোনও পোস্টে ব্যবহারকারীকে ট্যাগ করতে দেওয়ার জন্য আপনি বন্ধুদের একটি তালিকা সরবরাহ করছেন।

  2. যদি আপনার অ্যাপ্লিকেশনটি একটি গেম হয় এবং আপনার গেমটি ফেসবুক ক্যানভাসকে সমর্থন করে , আপনি একটি কাস্টম আমন্ত্রন ডায়ালগটি/me/invitable_friends রেন্ডার করতে শেষ পয়েন্টটিব্যবহার করতে পারেন, তারপরে এই এপিআই দ্বারা ফিরে আসা টোকেনগুলি স্ট্যান্ডার্ড রিকোয়েস্টস ডায়ালগে পাস করুন

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

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

আপডেট: ফেসবুক এখানে এই পরিবর্তনগুলি সম্পর্কে একটি FAQ প্রকাশ করেছে: https://developers.facebook.com/docs/apps/faq যা বন্ধুদের বরণ করার জন্য বিকাশকারীদের জন্য উপলভ্য সমস্ত বিকল্পগুলি ব্যাখ্যা করে etc.


আপনার শেষ সম্পাদনা থেকে কোনও সংবাদ বা আমরা একই পৃষ্ঠায়?
ইলিয়া গাজমান

taggable_friendsপর্যালোচনা জমা দেওয়ার জন্য আইটেমগুলিতে দেখতে পাচ্ছেন না ।
অ্যালিকেলজিন-কিলাকা

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

3
ফেসবুক সম্প্রতি উপলভ্য ডেটা: বড় পরিবর্তনগুলি প্রকাশ করেছে: চেঞ্জলগ দেখুনtaggable_friendsএখন কিছুই ফেরৎ। এছাড়াও, আপনাকে user_friendsঅনুমতি দেওয়ার আগে লগইন পর্যালোচনা প্রয়োজন ।
ডানকান জোন্স

যদি এপিআই আপনাকে বন্ধুদের তালিকাভুক্তকরণের মতো কোনও মৌলিক কাজটি করতে না দেয় তবে কী লাভ?
ইনফিনিটি

17

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

আমি নিজে এসে এখানে এসে ভাবলাম, এখন কি ?!

সমস্যাটি

শুধু user3594351 , আমি বন্ধু ডেটা ঠাহর হয় ফাঁকা ছিল। আমি ফ্রেন্ডপিকার ফ্রেগমেন্ট ব্যবহার করে এটি খুঁজে পেয়েছি। তিন মাস আগে কী কাজ করেছে, এখন আর কাজ করে না। এমনকি ফেসবুকের উদাহরণও ভেঙে যায়। সুতরাং আমার সমস্যাটি ছিল 'আমি কীভাবে হাতছাড়া করে ফ্রেন্ডপিকারফ্রেগমেন্ট তৈরি করব?

কি কাজ না

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

কি কাজ (সংক্ষিপ্তসার)

কিছু কঠোর পরিশ্রমের সাথে বিকল্প # 2। আপনি অবশ্যই ফেসবুকের নতুন নিয়মগুলি পূরণ করেছেন তা নিশ্চিত করতে হবে: ১) আপনি একটি খেলা ২) আপনার কাছে একটি ক্যানভাস অ্যাপ রয়েছে (ওয়েব উপস্থিতি) ৩) আপনার অ্যাপটি ফেসবুকের সাথে নিবন্ধিত হয়েছে। এটি সমস্ত সেটিংসের অধীনে ফেসবুক বিকাশকারী ওয়েবসাইটে করা হয়েছে ।

আমার অ্যাপ্লিকেশনের অভ্যন্তরে বন্ধু চয়নকারীকে অনুকরণ করতে আমি নিম্নলিখিতগুলি করেছি:

  1. একটি ট্যাব ক্রিয়াকলাপ তৈরি করুন যা দুটি টুকরোগুলি দেখায়। প্রতিটি খণ্ড একটি তালিকা দেখায়। উপলভ্য বন্ধুর ( / আমি / বন্ধুরা ) এবং অন্য আমন্ত্রিত বন্ধুদের ( / আমি / আমন্ত্রিত_ বন্ধুরা ) জন্য একটি টুকরা । উভয় ট্যাব রেন্ডার করতে একই টুকরা কোড ব্যবহার করুন।
  2. একটি অ্যাসিঙ্কটাস্ক তৈরি করুন যা ফেসবুক থেকে বন্ধুর ডেটা পাবে। সেই ডেটাটি লোড হয়ে গেলে অ্যাডাপ্টারে টস করুন যা স্ক্রিনে মানগুলি রেন্ডার করবে।

বিস্তারিত

অ্যাসিঙ্কটাস্ক

private class DownloadFacebookFriendsTask extends AsyncTask<FacebookFriend.Type, Boolean, Boolean> {

    private final String TAG = DownloadFacebookFriendsTask.class.getSimpleName();
    GraphObject graphObject;
    ArrayList<FacebookFriend> myList = new ArrayList<FacebookFriend>();

    @Override
    protected Boolean doInBackground(FacebookFriend.Type... pickType) {
        //
        // Determine Type
        //
        String facebookRequest;
        if (pickType[0] == FacebookFriend.Type.AVAILABLE) {
            facebookRequest = "/me/friends";
        } else {
            facebookRequest = "/me/invitable_friends";
        }

        //
        // Launch Facebook request and WAIT.
        //
        new Request(
            Session.getActiveSession(),
            facebookRequest,
            null,
            HttpMethod.GET,
            new Request.Callback() {
                public void onCompleted(Response response) {
                    FacebookRequestError error = response.getError();
                    if (error != null && response != null) {
                        Log.e(TAG, error.toString());
                    } else {
                        graphObject = response.getGraphObject();
                    }
                }
            }
        ).executeAndWait();

        //
        // Process Facebook response
        //
        //
        if (graphObject == null) {
            return false;
        }

        int numberOfRecords = 0;
        JSONArray dataArray = (JSONArray) graphObject.getProperty("data");
        if (dataArray.length() > 0) {

            // Ensure the user has at least one friend ...
            for (int i = 0; i < dataArray.length(); i++) {

                JSONObject jsonObject = dataArray.optJSONObject(i);
                FacebookFriend facebookFriend = new FacebookFriend(jsonObject, pickType[0]);

                if (facebookFriend.isValid()) {
                    numberOfRecords++;

                    myList.add(facebookFriend);
                }
            }
        }

        // Make sure there are records to process
        if (numberOfRecords > 0){
            return true;
        } else {
            return false;
        }
    }

    @Override
    protected void onProgressUpdate(Boolean... booleans) {
        // No need to update this, wait until the whole thread finishes.
    }

    @Override
    protected void onPostExecute(Boolean result) {
        if (result) {
            /*
            User the array "myList" to create the adapter which will control showing items in the list.
             */

        } else {
            Log.i(TAG, "Facebook Thread unable to Get/Parse friend data. Type = " + pickType);
        }
    }
}

আমি তৈরি ফেসবুক ফ্রেন্ড ক্লাস

public class FacebookFriend {

    String facebookId;
    String name;
    String pictureUrl;
    boolean invitable;
    boolean available;
    boolean isValid;
    public enum Type {AVAILABLE, INVITABLE};

    public FacebookFriend(JSONObject jsonObject, Type type) {
        //
        //Parse the Facebook Data from the JSON object.
        //
        try {
            if (type == Type.INVITABLE) {
                //parse /me/invitable_friend
                this.facebookId =  jsonObject.getString("id");
                this.name = jsonObject.getString("name");

                // Handle the picture data.
                JSONObject pictureJsonObject = jsonObject.getJSONObject("picture").getJSONObject("data");
                boolean isSilhouette = pictureJsonObject.getBoolean("is_silhouette");
                if (!isSilhouette) {
                    this.pictureUrl = pictureJsonObject.getString("url");

                } else {
                    this.pictureUrl = "";
                }

                this.invitable = true;
            } else {
                // Parse /me/friends
                this.facebookId =  jsonObject.getString("id");
                this.name = jsonObject.getString("name");
                this.available = true;
                this.pictureUrl = "";
            }

            isValid = true;
        } catch (JSONException e) {
            Log.w("#", "Warnings - unable to process Facebook JSON: " + e.getLocalizedMessage());
        }
    }
}

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

@ মারিও এটি হুডের নীচে ফেসবুকের উদ্দেশ্য। আপনি যে কোনও কিছু রাখতে এবং এটিকে একটি খেলা হিসাবে চিহ্নিত করতে পারেন কারণ এটি সত্যিই কোনও গেম কিনা সেগুলি তারা খেয়াল করে না। তারা যত্ন করে সমস্ত আপনার পকেট থেকে অর্থ পাচ্ছে।
স্যান্ডেলন

12

ফেসবুক তাদের নীতিগুলি এখন সংশোধন করেছে। আপনার অ্যাপ্লিকেশনটিতে ক্যানভাস বাস্তবায়ন না থাকলে এবং আপনার অ্যাপ্লিকেশনটি গেম না হলে আপনি পুরো বন্ধু তালিকাটি পেতে পারেন না। অবশ্যই ট্যাগেবল_ফ্রেন্ডসও রয়েছে তবে এটি কেবল ট্যাগিংয়ের জন্য।

আপনি কেবলমাত্র অ্যাপ্লিকেশনটিকে অনুমোদন দেওয়া বন্ধুদের তালিকা টানতে সক্ষম হবেন।

গ্রাফ এপিআই ১.০ ব্যবহার করছে এমন অ্যাপসটি ৩০ এপ্রিল, ২০১৫ পর্যন্ত কাজ করবে এবং এর পরে তা অবনমিত হবে।

এ সম্পর্কে আরও বিশদ পেতে নিম্নলিখিতটি দেখুন:


3

ইন সুইফট 4.2 এবং Xcode 10.1:

আপনি যদি ফেসবুক থেকে বন্ধুদের তালিকা পেতে চান তবে আপনার অ্যাপটি ফেসবুকে পর্যালোচনার জন্য জমা দিতে হবে। কিছু লগইন অনুমতি দেখুন:

লগইন অনুমতি

দুটি পদক্ষেপ এখানে:

1) প্রথমে আপনার অ্যাপের স্থিতি অবশ্যই লাইভে থাকতে হবে

2) ফেসবুক ফর্ম প্রয়োজনীয় অনুমতি পান ।

1) আমাদের অ্যাপের স্থিতি লাইভ সক্ষম করুন:

  1. অ্যাপ্লিকেশন পৃষ্ঠাতে যান এবং আপনার অ্যাপ্লিকেশনটি নির্বাচন করুন

    https://developers.facebook.com/apps/

  2. ড্যাশবোর্ডের উপরের ডানদিকে স্থিতি নির্বাচন করুন ।

    এখানে চিত্র বিবরণ লিখুন

  3. গোপনীয়তা নীতি URL টি জমা দিন

    এখানে চিত্র বিবরণ লিখুন

  4. বিভাগ নির্বাচন করুন

    এখানে চিত্র বিবরণ লিখুন

  5. এখন আমাদের অ্যাপ্লিকেশনটি লাইভ স্ট্যাটাসে রয়েছে।

    এখানে চিত্র বিবরণ লিখুন

এক ধাপ শেষ হয়েছে।

2) পর্যালোচনার জন্য আমাদের অ্যাপ্লিকেশন জমা দিন:

  1. প্রথমে প্রয়োজনীয় অনুরোধগুলি প্রেরণ করুন।

    উদাহরণ: ব্যবহারকারীর বন্ধু, ব্যবহারকারী_ভিডিও, ব্যবহারকারী_পোস্টস, ইত্যাদি

    এখানে চিত্র বিবরণ লিখুন

  2. দ্বিতীয়ত, বর্তমান অনুরোধ পৃষ্ঠায় যান

    এখানে চিত্র বিবরণ লিখুন

    উদাহরণ: ব্যবহারকারী_ভিত্তিক

  3. সমস্ত বিবরণ জমা দিন

    এখানে চিত্র বিবরণ লিখুন

  4. সমস্ত অনুরোধের জন্য এটি জমা দিন (ব্যবহারকারীর বন্ধু, ব্যবহারকারী_আভেন্টস, ব্যবহারকারী_ভিডিও, ব্যবহারকারী_পোস্ট, ইত্যাদি)।

  5. শেষ পর্যন্ত পর্যালোচনার জন্য আপনার অ্যাপ্লিকেশন জমা দিন।

    যদি আপনার পর্যালোচনাটি ফেসবুকের পক্ষ থেকে গৃহীত হয় তবে আপনি এখন পরিচিতি ইত্যাদি পড়ার যোগ্য হন


3
user_friendsঅনুমতি খুবই সীমিত। ফেসবুকের ডকুমেন্টেশন (এপ্রিল, 2019) থেকে: [এটি কেবলমাত্র] অ্যাপ্লিকেশনটি ব্যবহার করে এমন বন্ধুদের একটি তালিকা অ্যাক্সেস করার জন্য একটি অ্যাপ্লিকেশনকে অনুমতি দেয়। এই অনুমতিটি অংশীদারদের সীমিত সংখ্যায় সীমাবদ্ধ এবং ব্যবহারের জন্য ফেসবুকের পূর্ব অনুমোদনের প্রয়োজন। কোনও ব্যক্তির অপরের বন্ধু তালিকায় প্রদর্শিত হওয়ার জন্য, উভয় ব্যক্তিকে অবশ্যই তাদের বন্ধুদের তালিকা অ্যাপটির সাথে ভাগ করে নিতে হবে এবং লগইন করার সময় এই অনুমতিটি অক্ষম করা হয়নি।
দেয়ারসিনা

2

সাইমন যেমন উল্লেখ করেছেন, নতুন ফেসবুক এপিআইতে এটি সম্ভব নয়। খাঁটি প্রযুক্তিগতভাবে বলতে গেলে আপনি এটি ব্রাউজার অটোমেশনের মাধ্যমে করতে পারেন।

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

ওয়াটিএন ব্যবহার করে নমুনা বাস্তবায়ন :

class FacebookUser
{
  public string Name { get; set; }
  public long Id { get; set; }
}

public IList<FacebookUser> GetFacebookFriends(string email, string password, int? maxTimeoutInMilliseconds)
{
  var users = new List<FacebookUser>();
  Settings.Instance.MakeNewIeInstanceVisible = false;
  using (var browser = new IE("https://www.facebook.com"))
  {
    try
    {
      browser.TextField(Find.ByName("email")).Value = email;
      browser.TextField(Find.ByName("pass")).Value = password;
      browser.Form(Find.ById("login_form")).Submit();
      browser.WaitForComplete();
    }
    catch (ElementNotFoundException)
    {
      // We're already logged in
    }
    browser.GoTo("https://www.facebook.com/friends");
    var watch = new Stopwatch();
    watch.Start();

    Link previousLastLink = null;
    while (maxTimeoutInMilliseconds.HasValue && watch.Elapsed.TotalMilliseconds < maxTimeoutInMilliseconds.Value)
    {
      var lastLink = browser.Links.Where(l => l.GetAttributeValue("data-hovercard") != null
                       && l.GetAttributeValue("data-hovercard").Contains("user.php")
                       && l.Text != null
                     ).LastOrDefault();

      if (lastLink == null || previousLastLink == lastLink)
      {
        break;
      }

      var ieElement = lastLink.NativeElement as IEElement;
      if (ieElement != null)
      {
        var htmlElement = ieElement.AsHtmlElement;
        htmlElement.scrollIntoView();
        browser.WaitForComplete();
      }

      previousLastLink = lastLink;
    }

    var links = browser.Links.Where(l => l.GetAttributeValue("data-hovercard") != null
      && l.GetAttributeValue("data-hovercard").Contains("user.php")
      && l.Text != null
    ).ToList();

    var idRegex = new Regex("id=(?<id>([0-9]+))");
    foreach (var link in links)
    {
      string hovercard = link.GetAttributeValue("data-hovercard");
      var match = idRegex.Match(hovercard);
      long id = 0;
      if (match.Success)
      {
        id = long.Parse(match.Groups["id"].Value);
      }
      users.Add(new FacebookUser
      {
        Name = link.Text,
        Id = id
      });
    }
  }
  return users;
}

এই পদ্ধতির প্রয়োগের সাথে প্রোটোটাইপ (সি # / ওয়াটিএন ব্যবহার করে) https://github.com/svejdo1/ShadowApi দেখুন । এটি আপনার পরিচিতিগুলির একটি তালিকা পুনরুদ্ধার করে এমন ফেসবুক সংযোগকারীটির গতিশীল আপডেটেরও অনুমতি দিচ্ছে।


2
আপনার কোড ধরে নিয়েছে যে অ্যাপ্লিকেশনটির ব্যবহারকারীর ব্যবহারকারীর নাম এবং পাসওয়ার্ড অ্যাক্সেস রয়েছে। এটি OAuth কীভাবে কাজ করে না তা নয় এবং বেশিরভাগ ব্যবহারকারীরা কোনও অ্যাপ্লিকেশনটিতে তাদের FB ব্যবহারকারীর নাম এবং পাসওয়ার্ড সরবরাহ করে না। এটি একটি বিশাল নিরাপত্তা ঝুঁকি হতে পারে।
jbustamovej

32
এটি ফেসবুকের নীতির বিরুদ্ধে। এই পরামর্শ অনুসরণ করা উচিত নয়।
সাইমন ক্রস

3
অন্য নোটে, আপনি এমনকি আপনার হ্যাকটিতে আপনার ব্যবহারকারীর শংসাপত্রগুলি সুরক্ষিত রাখছেন না। কেউ যদি আপনার কোড ব্যবহার করার সিদ্ধান্ত নেন তবে দয়া করে নিশ্চিত হন যে এটি ইউএসআই https তে পরিবর্তন করে SSL ব্যবহার করে।
রোগালা

8
এটিকে তাদের মুখমুগ্ধ করার জন্য এক!
স্কাইনেট

12
আপনারা সকলেই মনে করেন যে ফেসবুকের নীতিগুলি একরকম আন্তর্জাতিক আইন এবং এটি ভেঙে আপনি একজন অপরাধী। এছাড়াও আপনারা মনে করেন যে ফেসবুকের ব্যবহারকারীর মনে সবচেয়ে ভাল রয়েছে, যা আমি মনে করি @ ওন্ড্রেজসেজেদার বলেছেন, যেহেতু তারা আপনাকে অন্য অ্যাপ্লিকেশনগুলিতে দেখাতে চাইলে আপনাকে বেছে নিতে দেয়। আমি মনে করি এটি বিনামূল্যে তাদের প্ল্যাটফর্মের মাধ্যমে অন্যের বৃদ্ধি ব্যাহত করার জন্য ফেসবুকের একটি পদক্ষেপ মাত্র। পরিবর্তে লোকেরা সরাসরি তাদের অ্যাপস, পরিষেবা, গেমস, সংবাদ ইত্যাদি সরাসরি ফেসবুকে বিকাশ করা শুরু করবে। এবং ফেসবুক বিজ্ঞাপনের জন্য যখন তারা না দেয় অর্থ প্রদান করুন।
JustGoscha

2

/me/taggable_friends?limit=5000আপনার জাভাস্ক্রিপ্ট কোড ব্যবহার করার চেষ্টা করুন

অথবা

গ্রাফ এপিআই চেষ্টা করুন :

https://graph.facebook.com/v2.3/user_id_here/taggable_friends?access_token=


2
আমি যেমন মনে করি - এখানে ডাউনভোটগুলি হ'ল কারণ "এই শেষ পয়েন্টটি ব্যবহারের জন্য ফেসবুকের দ্বারা পর্যালোচনা প্রয়োজন এবং কেবলমাত্র সেই ক্ষেত্রে ব্যবহার করা উচিত যেখানে আপনি কোনও পোস্টে ট্যাগ করতে ব্যবহারকারীদের তালিকা তৈরি করতে পারেন" " আপনি নির্বাচিত উত্তরে এ সম্পর্কে আরও পড়তে পারেন।
মুনাভাডার

। "ডেটা": [], "সারাংশ": total "মোট_কাউন্ট": 414}} আমি এই জসন ডেটা ব্লকটি পেয়েছি যাতে বন্ধু না পাওয়া যায়। আমি কি করতে পারি?
মকভিন

-1

ফেসবুক SDK এর গ্রাফ এপিআই 2.0 অথবা উপরে, আপনি অনুরোধ করা আবশ্যক user_friends যেহেতু ফেসবুক লগইন সময় প্রত্যেক ব্যবহারকারীর কাছ থেকে কোন অনুমতি user_friends আর প্রত্যেক লগইন ডিফল্টরূপে অন্তর্ভুক্ত করা হয়; আমরা এটি যোগ করতে হবে।

প্রতিটি ব্যবহারকারী মঞ্জুর করতে হবে user_friends প্রতিক্রিয়া প্রদর্শিত করতে অনুক্রমে অনুমতি / ME / বন্ধু

let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.loginBehavior = FBSDKLoginBehavior.web
fbLoginManager.logIn(withReadPermissions: ["email","user_friends","public_profile"], from: self) { (result, error) in
    if (error == nil) {

        let fbloginresult : FBSDKLoginManagerLoginResult = result!
        if fbloginresult.grantedPermissions != nil {
            if (fbloginresult.grantedPermissions.contains("email")) {
                // Do the stuff
            }
            else {
            }
        }
        else {
        }
    }
}

সুতরাং ফেসবুক লগইন করার সময়, এটি এমন স্ক্রিনের সাথে অনুরোধ জানায় যাতে সমস্ত অনুমতি রয়েছে:

এখানে চিত্র বিবরণ লিখুন

ব্যবহারকারী যদি চালিয়ে যান বোতাম টিপেন , অনুমতিগুলি সেট করা হবে। আপনি যখন গ্রাফ এপিআই ব্যবহার করে বন্ধুদের তালিকার অ্যাক্সেস করবেন তখন উপরের হিসাবে অ্যাপ্লিকেশনটিতে লগ ইন করা আপনার বন্ধুদের তালিকাভুক্ত করা হবে

if ((FBSDKAccessToken.current()) != nil) {
    FBSDKGraphRequest(graphPath: "/me/friends", parameters: ["fields" : "id,name"]).start(completionHandler: { (connection, result, error) -> Void in
        if (error == nil) {

            print(result!)
        }
    })
}

আউটপুটটিতে এমন ব্যবহারকারীরা থাকবে যারা ফেসবুকের মাধ্যমে আপনার অ্যাপ্লিকেশনটিতে লগইন করার সময় ব্যবহারকারীর বন্ধুকে অনুমতি দেয়।

{
    data = (
             {
                 id = xxxxxxxxxx;
                 name = "xxxxxxxx";
             }
           );
    paging = {
        cursors = {
            after = xxxxxx;
            before = xxxxxxx;
        };
    };
    summary = {
        "total_count" = 8;
    };
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.