Ключевое ограничение в вашем вопросе заключается в том, что мы не можем использовать «следующий» url, указанный в ответе.
Я постараюсь ответить на ваш вопрос, сначала задав более общий вопрос:
Как мы можем создать пользовательский интерфейс для нашего приложения Facebook, где каждый вызов большего количества элементов возвращает одинаковое количество элементов.
blockquote>Если пользователь запрашивает «больше», и получает 10 пунктов, нажимает «больше» и получает затем 4, затем 7 и т. д., она может подумать, что наше приложение не работает.
На странице [OpenGo] [0] пейджинга. Это:
limit
offset
до
, поскольку
blockquote>as упомянутых в заголовке подкачки. Однако, если мы реализуем решение с ограничением и смещением, где мы увеличиваем смещение, например:
https://graph.facebook.com/me/home?limit=10&offset=OFFSET
, где OFFSET будет увеличено на лимит каждого запроса, мы обнаружим, что количество возвращаемых результатов иногда не будет равный указанному параметру «предел». Это связано с тем, что параметры применяются на стороне Facebook до , проверяя, отображаются ли запрошенные результаты для зрителя. Мы просим 10, но мы можем получить 8 элементов взамен.
Это означает, что мы не можем использовать решение, в котором мы увеличиваем лимит и смещение, если мы хотим, чтобы запрос нашего приложения «больше» всегда возвращал тот же количество элементов.
Решение, предложенное в этом блоге Джеффом Боуэном (который работает в команде Facebook), является такой логикой:
- запросить следующие 10 элементов с: = RETRIEVED_CREATED_TIME и limit = YOUR_LIMIT
- получить поле created_time последнего элемента в ответе. / g21]
Вот пример кода, основанный на примере в упомянутом выше сообщении в блоге:
var graphURL = "https://graph.facebook.com/me/home?" + "callback=processResult&" + "date_format=U&" + "limit=10"; function loadPosts() { var script = document.createElement("script"); script.src = graphURL; document.body.appendChild(script); } function processResult(posts) { if (posts.data.length == 0) { document.getElementById("loadMore").innerHTML = "No more results"; } else { graphURL = graphURL + "&until=" + posts.data[posts.data.length-1].created_time; for (var post in posts.data) { var message = document.createElement("div"); message.innerHTML = posts.data[post].message; document.getElementById("content").appendChild(message); } } }
Это решение извлекает следующие 10 элементов из ленты новостей пользователя в хронологическом порядке без использования URL-адреса в ответе JSON.
Согласно комментарию @fstanis, я смог использовать https://github.com/google-pay/payment-data-cryptography-dotnet для расшифровки данных Google Pay.