Жёлтый Веб: Автоматизация и Партнёрский Маркетинг
14.3K subscribers
845 photos
48 videos
67 files
876 links
Номер заявления на регистрацию канала: №4781716924
Магазин топ-акков: https://yellowweb.shop
Бот экономии USDT TRC20 @lowfeetrxbot
ПОЛЕЗНЕЙШИЕ сервисы: https://yellowweb.top/links
Чат: @yellowwebchat
ЛС админа: @dvygolov
По рекламе: @babbie_valerie
Download Telegram
Продолжаем изучать API Facebook🙃

UPD: Про FbTool нагнал, всё там в порядке! И даже промокод YELLOW работает. Но запрос оставлю про запас)

https://graph.facebook.com/v12.0/graphql?access_token=<TOKEN>&method=post&doc_id=4560131040703514&variables={%22paymentAccountID%22:%22<ACCOUNTID>%22}

После того, как мы засунем в этот запрос токен и ID аккаунта, получим данные со скрина, в которых несложно докопаться до размера спенда со времени последнего биллинга, который невозможно получить через паблик API FB.

При желании найдёте там ещё немало интересной инфы касательно платежей🙃

#fbapi
Продолжаем изучать API FB, сегодня пройдёмся по чистке комментов 👇

Как вы в курсе, у нас есть 2 подхода к комментариям: скрытие и удаление. И у каждого из этих методов есть свои приверженцы.

Первые утверждают: скрывать лучше, поскольку юзер не видит, что его коммент удалён, и не идёт дальше жаловаться.

Вторые же говорят, что когда юзер видит пост, у которого много скрытых комментов - это наводит на нехорошие размышления!

Давайте с помощью запроса сделаем так, что минусы удаления комментов будут сведены на нет. И это запрос, который забанит пользователя на нашей фп.

https://graph.facebook.com/graphql?method=post&access_token=<TOKEN>&doc_id=5348059221933855&variables={"input":{"ban_action":"BAN","page_id":"<FPID>","target_user_id":"<USERTOBANID>","actor_id":"<USERID>","client_mutation_id":"1"}}

Если льёте одно ГЕО долгое время, то всех этих юзеров можно экспортить/импортить себе на фп, писал про это вот тут. Там же есть скрипт, в котором бан пользователю выписывается, используя паблик апи фб.

#fbapi
Пара "хаков" для тех, кто любит ковырять Meta API:

1. Вывод всех доступных полей и узлов, к которым можно совершать запросы

Для вывода данной инфы используйте в конце своего запроса &metadata=true.

На первом скрине представлен результат запроса, показывающего все доступные для ковыряния поля у рекламного кабинета.

2. Отладка

Если вы ковыряете и модифицируете какой-то запрос, но что-то идёт не так, то всегда включайте отладку. Для этого добавьте к вашему запросу &debug=all.

На втором скрине пример, где в отладочной инфе фэбэ прямым текстом говорит мне, что того поля, что я запрашиваю, не существует.

Happy Hacking!

P.S. Ну и помните, что в оф. доках Meta описаны далеко не все поля. Что-то можно будет раскопать через metadata, а что-то лучше подсмотреть в запросах Ads Manager☝️

#fbapi
Если вы пишете свои собственные js-скрипты для Facebook, ковыряете их private API и т.п., то вам часто приходится работать с разными внутренними переменными и токенами.
Но каждый раз вспоминать, как в моменте получить ту или иную штуку, бывает проблематично. Поэтому специально для вас, неутомимые исследователи, я сделал шпаргалку, в которой вы найдёте, как мне кажется, всё-всё-всё, что вам может потребоваться.

P.S. А если я что-то забыл - welcome в комментарии, дополним!

#fbapi
Эй, автоматизаторы!

Вы просили - я сделал 🙃 Несколько раз писали в ЛС вопрос: как по API узнать, какое максимальное кол-во акков разрешено создавать в выбранном БМе?

Ну и вот вам скрипт, собственно, ничего сложного 🤷

P.S. Там много лишнего кода, основной запрос находится в методе getBMAdAccountCreationLimit.

Автоматизируйте на здоровье!👍

P.P.S. рекомендую использовать этот запрос для автоматического создания акков в БМе. Типа: как только видим, что кол-во доступных акков больше, чем реальное - создаём новые.

Это удобно, потому что мало ли, что-то забанится, и возможность создавать акки в БМе пропадёт...

#fbapi
Все вы наверняка в курсе, что у любой фп, с которой крутится реклама, можно в Account Quality подать заявку, что фп не занимается коммерческой деятельностью.

При успешном прохождении (скрин 1) этой проверки у пользователей не будут спрашивать фидбек по нашей рекламе, и, соответственно, на фп не будут накладываться ограничения при низкой Feedback Score.

Я отсниффал POST-запрос, который как оказалось, показывает массу интересного (скрин 2):
1. Тот самый флаг - eCommerce мы или нет
2. IsYoungPage, ёпта! Предполагаю, что у тех страниц, у которых тут false результаты будут лучше, ну или они будут крепче
3. Кол-во раз, которое можно подать тикет на то, что мы не eCommerce
4. Для обычных продающих фп тут будет тот самый Feedback Score

IsBeingBannd и IsBeingPenalized тоже вполне полезно👍

Короче, граждане автоматизаторы, используйте в своих инструментах!

P.S. В частности IsYoungPage вполне неплохо смотрелась бы в панельке тов. L3nin-а 🙃

#фп #fp #fbapi
Инфа для ковырятелей Private API Facebook👇

Если вы когда-то пытались написать скрипт, требующий в процессе исполнения ввода пароля (например, удаление телефона или полное удаление аккаунта), то наверняка при прослушке трафика видели, что пароль в такие запросы передаётся в зашифрованном виде (скрин 1).

Возникает резонный вопрос, а как бы так получить этот "зашифрованный вид" из обычного пароля? Показываю!

Для начала нужно отсниффать ключ шифрования и его id (скрин 2). Они обычно находятся в предыдущем запросе к Private API.

Имея их на руках, воспользуемся функциями самого FB и получим пароль в нужном виде:

await require('FBBrowserPasswordEncryption').encryptPassword("key_id","public_key","пароль",Math.floor(Date.now() / 1e3).toString());

Меняем в этой строке key_id, public_key и пароль на ваши значения и получаем зашифрованный пароль, который можно скормить фб в нужном вам запросе! 🙃

Изи! (ну почти)

UPD: а зачастую, вместо этого самого зашифрованного пароля можно слать... НЕ зашифрованный! 🙃

#fbapi
Да, а если вы пишите не просто какие-то маленькие js-скрипты-закладки, а что-то серверное, типа автозалива, то найдите в js-исходниках фб эту функцию encryptPassword и воспроизведите её у себя на C#, PHP, Python и т.п.

Подробности по ней можете глянуть вот в этой статье: https://hackmd.io/@Ostrym/facebook-client-side-encryption

#fbapi
Про FB и персональные данные👇

А все уже видели этот прекрасный интерфейс Accounts Center (см скрин)? Он хорош тем, что там сразу же можно увидеть всю инфу по акку: почта-телефон-день рождения 👍

А ещё он хорош тем, что теперь всю эту инфу можно выдернуть всего одним запросом к Private API🙃 Написал для вас скрипт, который показывает, как это сделать.

UPD: тут был длинный рофл про индусов, но оказалось, что главный индус - это Данила-программист, который не шарит в Javascript🤷

#fbapi
Нашёл внутри js-исходников AdsManager удобный способ обращаться из своих скриптов к официальному API Facebook! 👇

Вот, например, как выглядит получение имени РК по его id:

await require("AdsGraphAPI").get('15.0').adaccount('11111').get({
fields: ["name"]
});

Очень удобно 👍

Вы можете нарыть себе кучу примеров использования в Developer Tools на вкладке Sources, поискав по всем файлам строку AdsGraphAPI"). Есть всё что нужно🔥

Писать кастомные скрипты стало проще🙃

P.S. Про Private API расскажу в следующем посте.

#fbapi
Давайте теперь рассмотрим работу с Private API фб 👇

Немного базы:
- все запросы нужно отправлять на адрес facebook.com/api/graphql
- практически всегда это POST-запросы
- в теле запроса есть несколько обязательных параметров:

1. doc_id - это уникальный идентификатор запроса, от него, собственно, зависит , что именно будет делать ваш запрос
2. variables - набор переменных для запроса в формате JSON
3. токен fb_dtsg - это примерно как обычный токен EAAB для Public API, получить его можно вот так require("DTSGInitData").token

Ну так вот, чтобы не собирать всю эту муть воедино ручками, умные дяди и тёти из фэбэ сделали для нас себя удобный класс AsyncRequest. Показываю, как пользоваться на примере запроса для получения персональных данных из поста выше:

let fbVariables = JSON.stringify({"device_id":"","flow":"FB_WEB_SETTINGS","interface":"FB_WEB","node_identifier":"personal_info"});
let fbDocId = '9146498392086837';
await new AsyncRequest().setURI('/api/graphql').setMethod("POST").setData({doc_id:fbDocId,variables:fbVariables}).send();

Вы заметили? Никаких fb_dtsg мы не указываем, всё встроено в AsyncRequest, а если посмотреть трафик на вкладке Network, то мы увидим, что в запросе есть вообще все параметры, которые обычно шлёт сам фб (см. скрин).

Короче: это МАКСИМАЛЬНО БЕСПАЛЕВНЫЙ вариант для работы ваших скриптов или браузерных расширений и точка! 👍

#fbapi
Если вам надо чекнуть по API, когда был создан тот или иной аккаунт (например, чтобы примерно понять, как давно был зареган проданный вам "авторег с отлёжкой в 2 месяца"), можно заюзать следующий запрос для лички:

https://graph.facebook.com/v16.0/act_ACCOUNTID?fields=created_time&access_token=TOKEN

Получим дату, как на скрине. Конечно, метод не особо точный, потому что РК обычно создаются не в первый день реги акка.

P.S. Для того, чтобы попробовать сделать наше предположение точнее, мы можем получим дату загрузки первой фотки профиля - обычно, это ава - или (что будет самым точным способом) распарсить информацию из настроек аккаунта, но об этом как-нибудь в следующий раз...

#fbapi
ВНЕЗАПНО, у фэбэ есть свой API для проверки правильности введённых номеров телефона👇

Выбираем стандартный двухбуквенный код страны, вводим номер и видим результат. Если номер по мнению Meta реальный, то вы получите по нему инфу (скрин 1), если же нет, то запрос вернёт пустое значение (скрин 2).

В качестве токена изначально используется токен БМа, но вы запросто можете поменять его на обычный EAAB от AdsManager-а. При этом вы, например, спокойно можете использовать этот токен от тестовых аккаунтов.

Где и как это применить - придумаете сами, а сам запрос выглядит вот так:

https://graph.facebook.com/v16.0/phone_number?access_token=<TOKEN>&fields=category%2Cdisplay_number%2Cregion_code%2Cregion_codes%2Curi&locale=en_US&method=get&number=%2B1302-200-7504&region=US

P.S. Если убрать параметр region=US, то фб будет сам определять страну номера🙃

#fbapi
Если вы размышляете над тем: почему ваши аккаунты фэбэ ограничивают в спенде до 25$/дейли (скрин №1), то обычно всё дело в отклонённых объявлениях. По моим тестам - достаточно 2-3 отклонённых объяв.

Как я это определил?

Помимо того, что FB чёрным по белому пишет об этом на скрине №1, можно найти информацию о причинах в результатах запроса к Private API - см. скрин №2.

P.S. Параметры запроса, если что, следующие:
variables: {"id":"айдивашегоакка","startTime":null}
doc_id: 6233091253412362
Как пользоваться Private API - писал на канале.

P.P.S. Для снятия плашки продолжаем лить траф на этом акке от недели и более - и мейби вам повезёт 🙃

#fbapi