كيف قاتلت السرقة ... باستخدام php


عندما ندفع يوميًا مقابل الخدمات ، يكون شراء الخدمات.
عندما ندفع يوميًا مقابل لا شيء (أحيانًا دون أن نعرف ذلك) - فهذه سرقة.

مساء الخير أيها القراء هبر!

كيف بدأ كل شيء


أردت أن أسرق أقل ، ودعنا نقاتل! ولكن كان الأمر يدويًا متعبًا وطويلًا وغير فعال ، ثم جاءت الفكرة لأتمتة هذا العمل بطريقة أو بأخرى.

عن أي من "سرقة" أنا؟ حول المكان الذي نسير فيه على الإنترنت ، نضغط على الزر "مشاهدة الفيديو" ، يتم تحميل بعض الصفحة ، لسبب ما لا يتم تشغيل الفيديو ، نترك ونمشي أكثر ، ولكن في الواقع قمنا بتنشيط الخدمة "طوعًا" لاستلام ما شيء لم يره أحد من قبل مقابل رسوم رمزية 30 روبل في اليوم من حسابه على الهاتف المحمول. في الناس ، يسمى هذا بنقرات WAP أو اشتراكات الهاتف المحمول ، ويأتي مشغلو الهواتف المحمولة بمجموعة متنوعة من الأسماء الجميلة. ومع ذلك ، لا تقم بتضمين سرقة أزرار الفيديو في قائمة الخدمات.

هنا المزيد من التفاصيل. وهنا قصة عن طريقة جيدة "لكسب المال".

هناك العديد من الحالات الموصوفة للاشتراكات الطوعية غير الكاملة ، على سبيل المثال ، هذه الاشتراكات. غير مكتوب - أكثر من ذلك بكثير.

المصارعون لديهم أيضًا:


ماذا ولماذا كانت آلية


البحث عن الإعلانات ومنعها في لوحة ناشري Google AdSense.
الهدف هو زيادة كفاءة الحجب وتحرير الوقت الذي يقضيه في التنظيف اليدوي.

جوهر المشكلة والحلول المتاحة
لسنوات عديدة ( أول ذكر لشيء مشابه وجدته كان في صيف 2014) ، أمسك الناشرون يدويًا بتدفقات "وفيات ياكوبوفيتش" و "الناهضون" و "شاهد الفيديو ، انقر فوق المشاهدة" والأرواح الشريرة الأخرى ( البداية ، تابع ) ، هذه العملية يكاد لا يوجد أتمتة 1 وبدت شبه مستحيلة.

1 هناك حلان (مرة واحدة على الأقل) ، لكنهما لديهما متطلبات خطيرة لا يستطيع الجميع تحملها.
هذه الحلول ذاتها:

  1. برنامج AdSense Cleaner . يستغرق الكثير من الإضافات. البرمجيات.
  2. AdsAutomation . البرنامج النصي للتحكم في متصفح Google Chrome (كما أفهمه ، على ZennoPoster). مطلوب جهاز كمبيوتر منفصل. وفي الوقت الحالي ، تم حذف المشروع من GitHub.

إذا قمت بإنشاء برنامج يحل محل الشخص الذي يحظر الإعلان ، فيجب أن يتم ذلك مع مراعاة عدد من المتطلبات:

  • يجب أن يعمل على الأجهزة والبرامج التي يمتلكها جميع مالكي المواقع تقريبًا ؛
  • لا تحتاج إلى برامج إضافية وتغيير الإعدادات الموجودة ؛
  • سهل التثبيت والتهيئة بحيث يمكن للمستخدم العادي تقديمه.
.

بشكل عام ، سيحصل php (مع cURL) على ما يتطلبه الأمر. يمكنك التحميل مباشرة إلى موقع الويب الخاص بك والعمل بدون أجهزة كمبيوتر إضافية وصعوبات أخرى.

وصقل واحد للمتطلبات.
نظرًا لأنه كان من المفترض أن يكون الحل تلقائيًا في php ، وبالتالي ، يتم تشغيله عبر cron ، يجب أن يكون تخزين إعدادات المستخدم والبيانات المؤقتة على القرص (وليس في ملف تعريف الارتباط). سيتم تخزين مفتاح الوصول إلى لوحة التحكم فقط في ملفات تعريف الارتباط. بالنسبة للنخبة الذين ليس لديهم القدرة على تكوين cron ، ولكن يمكنهم الاحتفاظ بعلامة تبويب واحدة مفتوحة على جهاز كمبيوتر / جهاز لوحي / هاتف ذكي ، ستتم إضافة القدرة على تشغيل مؤقت بشكل مؤقت على جافا سكريبت.

ما تنبأ به البداية أو Google API


وبالنسبة لبرنامج AdSense هناك واجهة برمجة تطبيقات ، فقد رأيتها بطريقة ما من زاوية عيني ولم أعمق. الآن هو الوقت المناسب للخوض فيه. هناك العديد من الاحتمالات ، ولكن اتضح أنه لم يتم وصف أي شيء هنا حول واجهة برمجة التطبيقات لوحدة المعالجة المركزية . تريد مشاهدة الإعلانات التي تدور في الموقع ، من فضلك - يدويا.

ابدأ


تم تصميم واجهة Google AdSense على AngularDart ، ويبدو كل شيء جميلًا ومعقدًا تمامًا من وجهة نظر الجهاز.

أولاً ، نظرت إلى أدوات مطوري Google Chrome في علامة التبويب "الشبكة" من أجل "التنصت" على كيفية تواصل هذه الواجهة المتطورة مع الخادم. كان هناك الكثير من الطلبات ، الأكثر إثارة للاهتمام بالنسبة لي كانت في قسم "XHR و Fetch" ، ووجدت شيئًا يبدو قابلًا للتخمين ، إذا كنت تفكر بعناية. على سبيل المثال ، أحد طلبات النشر:

السلسلة المرسلة.
{"method":"searchArcApprovals","params":"{\"1\":\"ca-pub-8958890276790964\",\"2\":{\"1\":0,\"2\":1,\"3\":0,\"4\":{\"1\":{\"1\":\"AClZvXKL6S3HChRty5YBa81BLWDBQkb3FYDsifZ9V/mBTKbOGlj3gMWVpzTtXggA1880Le9NyVZIicNm/4pz724e/MO8fyLfjOReF205cyjLV9C8OCCeKe7VvZHyvyKpXh8x9smTQ0n8qIIqzuIXle5UK0hD4VBkZDvy//qoSPRCr94UtWYqqi//Rot22LJ2JFNjWEGb4n1YQbAw0cKWPR3LAugPBajInWXEFGWJRTnmY2TkI5VzUzIkcXpJ/bkajn3c8GnecCfFNvNhGLS10VXdRwiykngG3xfoMTRhQOR5GXbm4kwdIhzQUM/d6xP0Xda3FOIZGGk9bymneg+9oDY+rMFiRfDFCb66g50t9J9r++oHXjek09Ci1rqC7LOw2pvkqp3hjG6RyVmsiT/eWGq+OsfjE7CgRk43QIRMSa+jlZBQhARUPlpUXzyZyoTiIPTRZ5ND/4MnIMqaUWSRoDGffiE/XkHJPEkNZtLX2XR5gZ3x5/K+ejU/fqxfZIjI6A3kueJybNA46wSLbmflhDCGDJEE2aeYemLFGqNzFG43B80LzU3yuwgZhrLu/jaMvBJozi0nq+gXEz6r+8tic4fvsQ9lWDA+IXzXw6MKzamgfWV0ORGDW0+966KIY6IkjtIlNRKGyp3pSAd2Po+br4Dl4WNwSkMdmuV60wOrkb5BpnKZKIhDtpjWF7q6ly3FFhwo8Ktdq5ddVJ8ijJ9Y9tQhs2O0idA9N0yV86khV1IQ72OgbMv15qAswnbqF9WCo3qpfJNjJqMCHBRTohPCxhRp0cWz2thszZTmDDADPxU46sclnurd/JxHFO7lJZVdrsFB4vdLIx9kObV3bP1gOpU66kdcmom2tiedknugj7s0jLcgf1EfXnp+SUUAQyoqwS+kdhhQtGqSXgI2TopsuaLVzj+EtAuPwWeLvtI9CFPSe4o2x+gjCRPl8wVvWKV5FIrZavUVOAHZIL4nKyJjHxZi3jPfVnAia/hq1gW6XKoCg1eWGg/cAWZY4mZYQ6W4XnC0MY0uMC6fhPQdXnIS5iLZNhan80jbr/leBr4fO22+tXc6oZpZsDkXd0r3ilBJFPS2I/zAhotuzZgNA+nF2N86pyiSrdeEYFDhKWKadcKAVc3BMxxlrqZYcAXnlus9GW7R9F/ImXQ/fjRfSjVRUaJuQ0EnFejNAwdGcS6STYMa1G0wnNMAKcZ52xcHgil1SZ6N9BQ7A27z6eViOxw0LHBqNJIRZwQml2KjPd5b00D9XvohDr6jBqYXLGS/HMVvpGDJZLDI2LRlmkqBqx7YEgDZqvspeoMLHIJP22SkQDnaJtsOLGVBSi20ZD5nRyjAgS6MmcgFCvfJVWjCIL1RPHqmUU90eK4WXve0ayH9cJnpbtWrkXYCibhVPCMmYowMROw7rI4bPir0\"}}}}","xsrf":"ABOvogKvrE9fIqAKh0w02RIsB4OJ4hsB_g:1535467885347"} 

يظهر معرّف الناشر على الفور في الطلب ، وتوجد في الفقرة الثانية مجموعة من المعلمات ، يمكن تحديد جوهرها تجريبيًا ورمز XSRF المميز.

ورداً على ذلك ، يتلقى معلومات تفصيلية حول الإعلان ، ولكن ليس كلها بدون الإعلان نفسه (هنا وفي الأسفل ، تم اقتصاص الصور الممتدة في base64).

ورقة من عدة صفحات.
 {"result":{"1":[{"1":0,"3":0,"4":{"1":"AClZvXJ2t4wiEZ/VZ0i54m0Qtqpi2DTqkI1kaPMTRi4LnsQn0iR5K1xBlFpS1xmJV7ko4a6qx5RcTkp7CzVjwoy5UDSWZ5jOCPLGRcoQdDt+wOk46bdr0yA\u003d"},"5":{"1":82,"2":0,"3":0,"4":"\u003cdiv id\u003d\"ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60\"\u003e\u003c/div\u003e","5":"\u003cdiv id\u003d\"ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60\"\u003e\u003c/div\u003e","6":"\u003cdiv\u003e\u041c\u043d\u043e\u0433\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u043d\u044b\u0435\u003cspan id\u003d'multi-format-tooltip'\u003e\u003c/span\u003e\u003c/div\u003e\u003ca class\u003d'arc-url-link-ellipsis' target\u003d'_blank' href\u003d'https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/' title\u003d'https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/'\u003ehttps://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\u003c/a\u003e","7":"\u003cdiv class\u003d'arc-one-by-one-legend'\u003e\u0422\u0438\u043f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003e\u041c\u043d\u043e\u0433\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u043d\u044b\u0435\u003cspan id\u003d'multi-format-tooltip'\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-legend'\u003e\u0426\u0435\u043b\u0435\u0432\u043e\u0439 URL\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003e\u003ca class\u003d'arc-url-link-ellipsis' target\u003d'_blank' href\u003d'https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/' title\u003d'https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/'\u003ehttps://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\u003c/a\u003e\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-legend'\u003e\u0414\u043e\u043c\u0435\u043d\u044b \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003e4aynikam.ru\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003eandroidphone.su\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003eandroidphones.ru\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003efull-repair.com\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003ehowgadget.com\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-legend'\u003e\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u043a\u043b\u0430\u043c\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u003cspan id\u003d'adx-advertiser-tooltip'\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003eDNS Shop\u003c/div\u003e","8":"\u003cdiv\u003e\u003cspan class\u003d'arc-impression-score high'\u003e\u0412\u042b\u0421\u041e\u041a\u041e\u0415\u003c/span\u003e \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u043e\u0432\u003c/div\u003e","9":{"1":"\u003ca href\u003d\"https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\" target\u003d\"_blank\"\u003e\u003cimg onerror\u003d\"this.src\u003d'data:image/gif;base64,RA7'\" src\u003d\"https://www.google.com/webpagethumbnail?c\u003d58\u0026s\u003d400:400\u0026r\u003d4\u0026d\u003dhttps://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\u0026a\u003dAIYkKU9ZGGjFTOWtm771MQwgDYxqtlBLCw\" border\u003d0 alt\u003d\"\"\u003e\u003c/a\u003e","2":"\u003ca href\u003d\"https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\" target\u003d\"_blank\"\u003e\u003cimg onerror\u003d\"this.src\u003d'data:image/gif;base64,R0AA7'\" src\u003d\"https://www.google.com/webpagethumbnail?c\u003d58\u0026s\u003d400:400\u0026r\u003d3\u0026d\u003dhttps://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\u0026a\u003dAIYkKU_CQ2K6v5f11Nk1RXtc87FtmG2B1w\" border\u003d0 alt\u003d\"\"\u003e\u003c/a\u003e","3":"\u003ca href\u003d\"https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\" target\u003d\"_blank\"\u003e\u003cimg onerror\u003d\"this.src\u003d'data:image/gif;base64,R0lAA7'\" src\u003d\"https://www.google.com/webpagethumbnail?c\u003d58\u0026s\u003d400:400\u0026r\u003d6\u0026d\u003dhttps://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\u0026a\u003dAIYkKU_My0a48LAsW-ZKpQX-ATXkMoPEVg\" border\u003d0 alt\u003d\"\"\u003e\u003c/a\u003e"},"10":"https://adwords-displayads.googleusercontent.com/da/b/preview.js?client\u003dasfe-arc-external-preview\u0026obfuscatedCustomerId\u003d5240877441\u0026creativeId\u003d288930210411\u0026htmlParentId\u003dad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60\u0026sig\u003dACiVB_yMUjLwDjRO2T-0VAaVuRPt8uLHGQ","13":"https://adwords-displayads.googleusercontent.com/da/b/preview.js?client\u003dasfe-arc-external-preview\u0026obfuscatedCustomerId\u003d5240877441\u0026creativeId\u003d288930210411\u0026htmlParentId\u003dad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60\u0026showVariations\u003dtrue\u0026sig\u003dACiVB_yMUjLwDjRO2T-0VAaVuRPt8uLHGQ","14":"https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/","15":"","17":"","18":"DNS Shop","20":"adv-5594449542310820","21":["site1.ru","site2.com","site3.com","site4.ru"]},"6":{"5":"-6668648012302470727","7":["DNS"],"9":0},"7":1,"9":{"3":[{"1":{"1":"AClZvXLE9HJbFYq9TrAsXFgV4YkXsQt9lXp1xWjSB5aT5bFBpe4VNgo\u003d"},"2":"\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0438","3":"\u0422\u043e\u0432\u0430\u0440\u044b \u0438 \u0443\u0441\u043b\u0443\u0433\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043a\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0435 \u0438 \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432\u043e\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442."},{"1":{"1":"AClZvXKrUJJ3kKBen2scP56BynOtGhf160i1F1LLmtBj3b/oh2dUFg8\u003d"},"2":"\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b","3":"\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0438 \u0441\u043e\u0442\u043e\u0432\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0442\u043e\u0432\u0430\u0440\u043e\u0432. \u0412 \u044d\u0442\u0443 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u044b \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432."},{"1":{"1":"AClZvXL4W+khZ4O9SJiu97cTbTs2+0Wecf1IVNju8ffd4ysIT9PJ7XY\u003d"},"2":"\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b \u0438 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u044b \u0434\u043b\u044f \u043d\u0438\u0445","3":"\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u044b \u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0447\u0435\u0445\u043b\u044b, \u043c\u043e\u043d\u043e\u043f\u043e\u0434\u044b \u0434\u043b\u044f \u0441\u0435\u043b\u0444\u0438, \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0435 \u044d\u043a\u0440\u0430\u043d\u044b \u0438 \u0437\u0430\u0440\u044f\u0434\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430."},{"1":{"1":"AClZvXLQ3gPoVwjQbokDpB3+nni4xURwH5+YlnwkqjYtUowjhiKvk8Q\u003d"},"2":"\u041f\u041a \u0438 \u0431\u044b\u0442\u043e\u0432\u0430\u044f \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430","3":"\u0422\u043e\u0432\u0430\u0440\u044b, \u0443\u0441\u043b\u0443\u0433\u0438 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c\u0438 \u0438 \u0431\u044b\u0442\u043e\u0432\u043e\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u043e\u0439."},{"1":{"1":"AClZvXLKYOGgOROaa32IUxU15jP89AtTM4dV24WKS+daMhqJMTNmeSY\u003d"},"2":"\u0422\u0435\u043b\u0435\u0444\u043e\u043d\u0438\u044f","3":"\u0422\u043e\u0432\u0430\u0440\u044b, \u0443\u0441\u043b\u0443\u0433\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0438\u0435\u0439 \u0438 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u0441\u0432\u044f\u0437\u044c\u044e."}]},"10":{"1":"AClZvXLdGOShgJo+BM3apOUAFzQkE41z1/hiZhIY8eUlC7p7xXPm82P3dq7yXhbEI+tN/YHgdH4P"}}],"2":0.0,"3":"60609","4":1,"5":"","6":"ClD3Z2nP2P/////1/ff99fXV98nMyMrJz8rH9fHV883Hx8bMz83Oz8vOzv8A/v/+9f33/fX11ffJzMjKyc/Kx/Xx1fPNx8fGzM/Nzs/Lzs7//hABIWxUk293Pm+qOQAAAAAnMJaYSAFQAFoLCS8wxxaTatL1EAJgp7737gY\u003d","7":"3639","9":0},"xsrf":"ABOvogKaRsVZECZZJU-gDWrOqoP0CSqf7Q:1535467886413"} 

بعد json_decode ، يبدو الأمر كالتالي:

كائن من سلسلة json (تنبيه ، 175 سطرًا).
 كائن (stdClass) # 19 (2) {
   ["نتيجة"] =>
   كائن (stdClass) # 18 (8) {
     ["1"] =>
     المصفوفة (1) {
       [0] =>
       كائن (stdClass) # 1 (8) {
         ["1"] =>
         int (0)
         ["3"] =>
         int (0)
         ["4"] =>
         كائن (stdClass) # 2 (1) {
           ["1"] =>
           سلسلة (120) "AClZvXJ2t4wiEZ / VZ0i54m0Qtqpi2DTqkI1kaPMTRi4LnsQn0iR5K1xBlFpS1xmJV7ko4a6qx5RcTkp7CzVjwoy5UDSWZQQDDQQ0QQQQQ0QQQQ0QQQQ
         }}
         ["5"] =>
         كائن (stdClass) # 3 (17) {
           ["1"] =>
           int (82)
           ["2"] =>
           int (0)
           ["3"] =>
           int (0)
           ["4"] =>
           السلسلة (102) "<div id =" ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60 "> </div>"
           ["5"] =>
           السلسلة (102) "<div id =" ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60 "> </div>"
           ["6"] =>
           string (355) "<div> Multi-format <span id = 'multi-format-tooltip'> </span> </div> <a class = 'arc-url-link-ellipsis' target = '_ blank' href = ' https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/ 'title =' https: //www.dns-shop.ru/actions/c09a061b-a048-11e8-9547- 00155d03330d / '> https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/ </a> "
           ["7"] =>
           string (1066) "<div class = 'arc-one-by-one-legend'> نوع الإعلان </ div> <div class = 'arc-one-by-one-data'> متعدد الأشكال <span id = 'multi -format-tooltip '> </span> </div> <div class =' ​​arc-one-by-one-legend '> عنوان URL المقصود </ div> <div class =' ​​arc-one-by-one-data '> <a class =' ​​arc-url-link-ellipsis 'target =' _ blank 'href =' https: //www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/ 'title = 'https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/'>https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d / </a> </div> <div class = 'arc-one-by-one-legend'> نطاقات الناشر </ div> <div class = 'arc-one-by-one-data'> 4aynikam.ru </div> <div class = 'arc-one-by-one-data'> androidphone.su </div> <div class = 'arc-one-by-one-data'> androidphones.ru </div> <div class = 'arc-one-by-one-data'> full-repair.com </div> <div class = 'arc-one-by-one-data'> howgadget.com </div> <div class = 'arc-one-by-one-legend'> معلن تم اكتشافه <span id = 'adx-  advertiser-tooltip '> </span> </div> <div class =' ​​arc-one-by-one-data '> DNS Shop </div> "
           ["8"] =>
           السلسلة (98) "<div> <span class = 'arc-impression-Score high'> HIGH </span> من مرات الظهور </ div>"
           ["9"] =>
           الكائن (stdClass) # 4 (3) {
             ["1"] =>
             السلسلة (4191) "<a href="https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/" target="_blank"> <img onerror =" this.src = 'data: image / gif؛ base64، RCw "border = 0 alt =" "> </a>"
             ["2"] =>
             السلسلة (4191) "<a href="https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/" target="_blank"> <img onerror =" this.src = 'data: image / gif؛ base64، R1w "border = 0 alt =" "> </a>"
             ["3"] =>
             السلسلة (4191) "<a href="https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/" target="_blank"> <img onerror =" this.src = 'data: image / gif؛ base64، Rg "border = 0 alt =" "> </a>"
           }}
           ["10"] =>
           سلسلة (291) "https://adwords-displayads.googleusercontent.com/da/b/preview.js؟client=asfe-arc-external-preview&obfuscatedCustomerId=5240877441&creativeId=288930210411&htmlParentId=ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60&sig=ACiVB_yMUjLwDjRO2T-0VAaVuRPt8uLHGQ "
           ["13"] =>
           سلسلة (311) "https://adwords-displayads.googleusercontent.com/da/b/preview.js؟client=asfe-arc-external-preview&obfuscatedCustomerId=5240877441&creativeId=288930210411&htmlParentId=ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60&showVariations=true&sig=ACiVB_yMUjLwDjRO2T -0VAaVuRPt8uLHGQ "
           ["14"] =>
           سلسلة (69) "https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/"
           ["15"] =>
           السلسلة (0) ""
           ["17"] =>
           السلسلة (0) ""
           ["18"] =>
           سلسلة (8) "متجر DNS"
           ["20"] =>
           سلسلة (20) "adv-5594449542310820"
           ["21"] =>
           المصفوفة (4) {
             [0] =>
             السلسلة (8) "site1.ru"
             [1] =>
             السلسلة (9) "site2.com"
             [2] =>
             السلسلة (9) "site3.com"
             [3] =>
             السلسلة (8) "site4.ru"
           }}
         }}
         ["6"] =>
         كائن (stdClass) # 5 (3) {
           ["5"] =>
           السلسلة (20) "-6668648012302470727"
           ["7"] =>
           المصفوفة (1) {
             [0] =>
             السلسلة (3) "DNS"
           }}
           ["9"] =>
           int (0)
         }}
         ["7"] =>
         int (1)
         ["9"] =>
         كائن (stdClass) # 16 (1) {
           ["3"] =>
           المصفوفة (5) {
             [0] =>
             كائن (stdClass) # 7 (3) {
               ["1"] =>
               الكائن (stdClass) # 6 (1) {
                 ["1"] =>
                 السلسلة (56) "AClZvXLE9HJbFYq9TrAsXFgV4YkXsQt9lXp1xWjSB5aT5bFBpe4VNgo ="
               }}
               ["2"] =>
               سلسلة (52) "الإنترنت والاتصالات"
               ["3"] =>
               السلسلة (217) "المنتجات والخدمات المتعلقة بالاتصالات ، بما في ذلك خدمات الكابلات والأقمار الصناعية والوصول إلى الإنترنت."
             }}
             [1] =>
             كائن (stdClass) # 9 (3) {
               ["1"] =>
               كائن (stdClass) # 8 (1) {
                 ["1"] =>
                 السلسلة (56) "AClZvXKrUJJ3kKBen2scP56BynOtGhf160i1F1LLmtBj3b / oh2dUFg8 ="
               }}
               ["2"] =>
               سلسلة (35) "هواتف نقالة"
               ["3"] =>
               سلسلة (359) "الهواتف المحمولة والهواتف المحمولة ، والمعلومات ذات الصلة ، مثل المواصفات الفنية والتحليل المقارن للمنتجات. لا تتضمن هذه الفئة ملحقات الهواتف المحمولة."
             }}
             [2] =>
             كائن (stdClass) # 11 (3) {
               ["1"] =>
               كائن (stdClass) # 10 (1) {
                 ["1"] =>
                 السلسلة (56) "AClZvXL4W + khZ4O9SJiu97cTbTs2 + 0Wecf1IVNju8ffd4ysIT9PJ7XY ="
               }}
               ["2"] =>
               سلسلة (73) "الهواتف المحمولة وملحقاتها"
               ["3"] =>
               سلسلة (283) "الهواتف المحمولة ، وكذلك الملحقات والأجهزة ذات الصلة ، مثل الحافظات ، وأحادية السيلفي للصور الشخصية ، وشاشات الأمان والشواحن."
             }}
             [3] =>
             كائن (stdClass) # 13 (3) {
               ["1"] =>
               كائن (stdClass) # 12 (1) {
                 ["1"] =>
                 السلسلة (56) "AClZvXLQ3gPoVwjQbokDpB3 + nni4xURwH5 + YlnwkqjYtUowjhiKvk8Q ="
               }}
               ["2"] =>
               سلسلة (45) "الكمبيوتر الشخصي والالكترونيات الاستهلاكية"
               ["3"] =>
               سلسلة (142) "المنتجات والخدمات والمعلومات المتعلقة بأجهزة الكمبيوتر والإلكترونيات الاستهلاكية."
             }}
             [4] =>
             كائن (stdClass) # 15 (3) {
               ["1"] =>
               كائن (stdClass) # 14 (1) {
                 ["1"] =>
                 السلسلة (56) "AClZvXLKYOGgOROaa32IUxU15jP89AtTM4dV24WKS + daMhqJMTNmeSY ="
               }}
               ["2"] =>
               سلسلة (18) "مهاتفة"
               ["3"] =>
               سلسلة (181) "المنتجات والخدمات ، بالإضافة إلى المعلومات والموارد الأخرى المتعلقة بالهاتف والاتصالات الصوتية".
             }}
           }}
         }}
         ["10"] =>
         كائن (stdClass) # 17 (1) {
           ["1"] =>
           سلسلة (76) "AClZvXLdGOShgJo + BM3apOUAFzQkE41z1 / hiZhIY8eUlC7p7xXPm82P3dq7yXhbEI + tN / YHgdH4P"
         }}
       }}
     }}
     ["2"] =>
     تعويم (0)
     ["3"] =>
     سلسلة (5) "60609"
     ["4"] =>
     int (1)
     ["5"] =>
     السلسلة (0) ""
     ["6"] =>
     سلسلة (168) "ClD3Z2nP2P ///// 1 / ff99fXV98nMyMrJz8rH9fHV883Hx8bMz83Oz8vOzv8A / ت / + 9f33 / fX11ffJzMjKyc / KX / Xx1fPNx8fGzM / NZS / Lzs7 // hABIWxUk293Pm + qOQAAAAAnMJaYSAFQAFoLCS8wxxaTatL1EAJgp7737gY ="
     ["7"] =>
     السلسلة (4) "3639"
     ["9"] =>
     int (0)
   }}
   ["xsrf"] =>
   السلسلة (48) "ABOvogKaRsVZECZZJU-gDWrOqoP0CSqf7Q: 1535467886413"
 }}


كان هذا مثال رد يحتوي على إعلان واحد فقط. افهم ما هو ممكن.
وبالنسبة إلى الاستفسارات الأخرى ، تُسمى الأساليب بطريقة إنسانية تمامًا. بعض الأمثلة:

  • getWebPropertyMetricsToken
  • getAdDisplayLanguages
  • getArcSettings
  • getAdNetworkApprovals
  • getPubControlsCapabilities

ممكن نظريا. للمعركة؟


حسنًا ، من الممكن حل اتصالاتهم (نظريًا) ، ولكن كل هذا لن يكون مفيدًا ، وستبقى النظرية إذا لم تسمح بذلك على Google.

التفويض أو كيفية دخول جوجل على php + cURL


مرة أخرى ، أدوات المطور ، الخروج من الحساب وإلقاء نظرة على تبادل البيانات. لا أتذكر بالتفصيل ، لأنني لم أستطع فهم أي شيء هناك. كمية ضخمة من JS ، يبدو أنه يتم إجراء نوع من الحسابات مباشرة على العميل ، ويتم إرسال النتائج إلى الخادم. بشكل عام ، يكاد يكون من المستحيل على الشخص الدخول.

نحن نفكر أكثر. حفنة من شبيبة. وإذا قمت بتعطيل شبيبة؟ لكن جوجل لن تحرم المستخدمين بدون JS من القدرة على تسجيل الدخول؟ حسنا ، حاول بدون شبيبة. خارجياً ، تبدو نافذة المصادقة أسهل بكثير. كما كان من قبل ، أدخل أولاً تسجيل الدخول وكلمة المرور في الصفحة التالية. الأهم من ذلك ، من حيث HTML ، أنها أسهل بكثير! علامة "النموذج" المعتادة مع حقول "الإدخال" المعتادة ، على الرغم من عدم وجود مجموعة من الحقول الواقية أو الحقول المخفية للنظام. لكن الحقول المخفية ليست مشكلة ، لأن ما يتلقونه عند الإدخال يتم تمريره إلى البرنامج النصي التالي. وهكذا اتضح أن تسجيل الدخول إلى Google. وتفويض من خطوتين؟ المزيد عن هذا في وقت لاحق. تحتاج أولاً إلى التأكد من أنه يمكنك سحب الإعلانات للفحص ، وإلا فلن يكون كل ذلك منطقيًا.

هل النظري ممكن عمليًا؟


لقد دخلت Google - حان الوقت لاختبار نظرية كشف بروتوكولات الاتصال عمليًا. كان عليّ أن العبث بالتجارب والملاحظات ، وأن أراقب بعناية وأن تسجل إجراءات المستخدم التي تؤدي إلى الاستعلامات ، وتحديد عناصر الاستعلام الشائعة والمتغيرة ، ومقارنة القيم الطويلة غير المفهومة التي يتم تلقيها من الخادم بالقيم الطويلة نفسها التي يتم إرسالها في الطلب التالي. لقد كانت غابة كثيفة أصبحت بمرور الوقت أكثر وضوحًا وشفافية.

ما الذي يجب القيام به لفهم أن الاستمرارية منطقية؟

  1. قم بتسجيل الدخول إلى CPO .
  2. احصل على قائمة الإعلانات.
  3. احصل على إعلان محدد (نص أولاً).

إن تسجيل الدخول إلى CPO هو أبسط ، تقريبًا ، ما عليك سوى اتباع الرابط. اتضح.

التفاصيل
نحن ببساطة نتبع الرابط ، نحصل على الإجابة (التي لا نستخدمها في هذه الحالة). نحتاج أيضًا إلى طلب رمز رقمي وحفظه للطلبات المستقبلية.

في وقت كتابة هذا التقرير ، كان لدى AdSense مركزين للخدمة العامة. سوف أسميهم قديمًا وجديدًا بشروط.

بالنسبة CPO القديم.

لا يوجد طلب مشاركة تحميل:

https://www.google.com/adsense/gwt-properties?pid=pub-8958890276790964&authuser=0&tpid=pub-8958890276790964&ov=3&hl=en

الجواب:

 <meta name="gwt:property" content="usePropertyService=true"> <meta name="gwt:property" content="applicationType=ASFE3"> <meta name="gwt:property" content="syn.token=ABOvogJ1yQyL9pgHcGYM-J3OLj_9VSh31w:1535115071772"> <meta name="gwt:property" content="syn.token.pb=ABOvogKJ6-xmsNWK4Mbe_H5bT1xXhyj8SQ:1535115071772"> <meta name="gwt:property" content="syn.login=XXXXXX@gmail.com"> <meta name="gwt:property" content="syn.csi.backendUrl="> <meta name="gwt:property" content="syn.helpCenterUrl=//support.google.com/adsense/"> <meta name="gwt:property" content="syn.helpHost=//support.google.com"> <meta name="gwt:property" content="syn.helpCenterUri=/adsense"> <meta name="gwt:property" content="syn.newHelpHost=https://clients6.google.com"> <meta name="gwt:property" content="syn.newHelpCenterUri=/adsense"> <meta name="gwt:property" content="syn.helpCenterGaiaAuthDisabled=false"> <meta name="gwt:property" content="syn.billing3BaseUri=https://bpui0.google.com"> <meta name="gwt:property" content="syn.contextPath=/adsense"> <meta name="gwt:property" content="syn.userLanguage=en-US"> <meta name="gwt:property" content="syn.bruschettaContextPath=/adsense/new"> <meta name="gwt:property" content="userProfileImageUrl=https://lh5.googleusercontent.com/-v7nuoAI4eEQ/AAAAAAAAAAI/AAAAAAAAAAA/AT3-yjmKyg8/s96/photo.jpg"> <meta name="gwt:property" content="userDisplayName=" "> <meta name="gwt:property" content="userSettingsUrl=https://www.google.com/settings"> <meta name="gwt:property" content="googlePlusProfileUrl=https://plus.google.com/me"> <meta name="gwt:property" content="googlePrivacyUrl=http://www.google.com/intl/en_US/policies/privacy/"> <meta name="gwt:property" content="syn.features=562,465,612,604,616,618"> <meta name="gwt:property" content="analyticsHomePageUrl=https://www.google.com/analytics/web/"> <meta name="gwt:property" content="disableDebugIds=true"> <meta name="gwt:property" content="syn.pubControlsCapabilitiesLoadTimeout=5000"> <meta name="gwt:property" content="pid=pub-8958890276790964"> <meta name="gwt:property" content="tpid=pub-8958890276790964"> <meta name="gwt:property" content="syn.asfeGtmCampaignId=GTM-K7WZ"> 

نحتاج إلى السطر الرابع ، وهو "syn.token.pb". نحافظ على هذه القيمة لمزيد من توليد الاستعلام.

بالنسبة CPO الجديد.

لا يوجد طلب مشاركة تحميل:

https://www.google.com/ads-publisher-controls/acx/5/darc/loader?onearcClient=adsense&pc=ca-pub-8958890276790964&tpid=pub-8958890276790964&hl=en

الجواب:

 (function() {function loadAsyncOrDefer() {var scriptElement = document.createElement('script'); scriptElement.src = 'https:\/\/ssl.gstatic.com\/ads-publisher-controls\/onearc_20180822-12_RC00\/darc\/arc_app.dart.js';scriptElement.type = 'application\/javascript';scriptElement.defer = true;scriptElement.nonce = window['acxCspNonce'];scriptElement = document.head.appendChild(scriptElement); if ('_resourceTimingBuffer' in window) {_resourceTimingBuffer.add(scriptElement.src);}};loadAsyncOrDefer();})();window['__darc_app_params'] = {'onearcClient': 'ADSENSE','hl': 'ru','pc': 'ca-pub-8958890276790964','tpid': 'pub-8958890276790964',};window['__app_metadata'] = {'token': 'ABiMD8TT9vzK99SFB7iaI0ssBySxT9jjrQ:1535116725529','pre': '\/ads-publisher-controls\/acx','scs': 'https:\/\/ssl.gstatic.com\/ads-publisher-controls\/onearc_20180822-12_RC00','oacf': '\x7b\x221\x22:\x5b5,25,22,8,27,32,43,44,45,48,49,5,25,22,8,27,32,43,44,45,48,49,29,46\x5d\x7d','hats': 'ibhswcm2x2iztju5i6jbbzlkma',}; 

التسلسل الذي نحتاجه هنا:

'token': 'ABiMD8TT9vzK99SFB7iaI0ssBySxT9jjrQ:1535116725529'


يعد الحصول على قائمة مهمة مثيرة للاهتمام ، لأنك تحتاج إلى تمرير مجموعة من الإعدادات - أخبرنا بما نريد تلقيه (نوع الإعلانات ، محدد / جديد / محظور ، عدد الإعلانات ، وما إلى ذلك). بالإضافة إلى رمز XSRF رقمي لكل طلب. اتضح. واستجابة لذلك ، وردت كمية كبيرة من البيانات ، حتى أنها تحتوي على صور مصغرة لصور تلك المواقع التي أدت إليها الإعلانات. وبالطبع ، روابط للإعلانات.

التفاصيل
تم الحفاظ على مسودات محاولاتي لمعرفة المعلمة المسؤولة عن ماذا. قمت بتدليلهم قليلاً ، وقمت بقص كل حصيرة والرموز ونشرتها هنا. أولاً سيكون هناك تسلسل لـ CPO القديم ، ثم الجديد.

بعد ذلك ، سأدعو أسماء الطرق (فقط لوحدة المعالجة المركزية الجديدة ، للطريقة القديمة المشار إليها في نص الطلب) وسلسلة json ، نظرًا لأنها "شركات نقل" المعلومات ، وكل شيء آخر (العنوان ، الرؤوس ، الرموز الرقمية ، المعلمات الأخرى) - "المجمع "، إنهم ليسوا أساسيين ، سأخبركم بكل شيء عن ذلك لاحقًا.

بالنسبة لوحدة المعالجة المركزية القديمة (متغير معلمات json request):

 { "1":"ca-pub-8958890276790964", "2":{ "1":0, //  ,          "2":32, // -   "3":0, // 0 - , 1-  "4":{ "1":{"1":"-    "} //    }, "5":{ "1":"video" //   "2":1, //  ,     "3":1, //       "6":7, //      "16":[0], // 0 - ; 1 - ; 2 - .      . "17":0 //       } }, "3":"-3945261286198141534" //,    } 

فك التشفير هو أننا نشكل طلبًا ونتلقى الجواب.

بالنسبة إلى CPO القديم ، تحتاج أولاً إلى الحصول على رمز مميز - تقديم طلب آخر قبل طلب الإعلانات:

 {"method":"getWebPropertyMetricsToken","params":"{\"1\":\"ca-pub-8958890276790964\"}","xsrf":"ABOvogKJ6-xmsNWK4Mbe_H5bT1xXhyj8SQ:1535115071772"} 

الجواب:

 {"result":{"1":{"1":{"1":"AClZvXKte+4mEwsFB7kw20LrbWQ6jOMxmK8j4At4Vxqc7w+5dDDYWIx2k1ldCvvGbAT59UClLSkQty6zyZZQSmgxKvpKhq22bKRfGy8ywt0B5L8WE53vo+YtI8ixM8Xe0RPixTjPtOLQA8sCZod+hvHxqU5Depi3I9XUV6JMn8uCOg67m+5oe5TT1L0OytnUBDIsjAaQ+kcldN23yGoppKKCs2Zf5XI6i7nk5QHehS8wvsDlugvkKSU3fUo3J+ZHJvoUXyCGLP3lP9Gh+6fOMir/SLrOJx8udRbtjTJhLsvXTXUN2QbjcEfFFAIaWfgMr5euHtYwYYWuMoI5ofZTc9L8sCY5pA0Q/CWyZ6QLH85XI70vxH6cBZtsnfrPLRh18cxSxFgzXuAwPHW8+CueCznqiHcY7gOhxQc2YWmSgwMIP9Cpgr089dWoB58wulcK0g+EqnTJiQdI9MMUj4zzLpu5DYja5ftP7lF3jeCSuKT9q70B9OqMDvlGlruZd2hhHe3k5S+LoyWo/4WZDUTvWpCMmnPzCP3R4OIQnrhS0s5ffOVxjyNHrXJXtrNhppap3BY4iByIn1cowMfVFfx3hNep0JW59db9fVuXKaSy/mqHZKC1ToRM/UyCoSZ9ZjY/Ot091ptURLRYoTFal5TBbMKISgxn5UCz4vSoxVe1fC64dwXHatSzCCg9AjJOpKR4p/9smxOaKg73pmMHsEY98I6TJhvaeJ9o6lcHsG8PZnB6xNS4ZJHBtN1baHkrCHOfqaepMVyRCF2kPNhr9SgujjTTbiKGMUO3UVamOQQ5/EckTgFMr0PIda7PPw7op8qFEhxZmkoo9KgERcYLGHxzGePjfo0IiNbf7k50lgDipwk5ag3CI0tw3CtDicQn6isHwKOmlfSctrEGv/Fjlmcgjhl1sTAL/rTWxDCABKN7/OhdysBAOq0j6viFgzjM8WI0ZuYPIVIm19CQ+YGcOx77oiyxev+3sAj7uSJoYFslmgiZV4jrF5P+b+U/5fknRf2Ho8plAUh4AHweXMeaPFYZAYooe6jC79EzgizqXvx1H/HrKKQcaXdDZ1ivoOM/7DtzJbawzO7ALUnHkqR1ZYmw3+3E/pmsDXedYgzERWYWvJltS+P46iWYOS43SUVw+whDWZnjJOwVOFFLDWcg4ykfzNmbq4B/vUibrV1dCiRpTIXSP92xk1I8MCfQGiptqo5MiKttqJ9Orj7nrGXEDz5pJBTTem919nz5rNIjI/sus3GZ+G4rBE+9i1sJN0jxszvpRD2AKsl1KSOrPCuOBhpNbD2HnFgQd+EUw8CpH2MLZlrZ8l3cqzDVc5aeCQ1eiUKlONlZpIxZi5wE5HyKZRxC8ljtX5xe+Fpg8R8/yDarvAkjeb0yKzN/e893nEVz3CmF68pphNp71kjJtvwBS2JtSWhFc81Ys51GEw\u003d\u003d"}}},"xsrf":"ABOvogJLbcTkcBxU_TCJddIrW4L-mVwPcw:1535115072920"} 

هذا الرمز الضخم ("1": "AClZ ...") سنحتاج إلى طلب الإعلانات.

طلب الإعلانات:

 {"method":"searchArcApprovals","params":"{"1":"ca-pub-8958890276790964","2":{"1":0,"2":24,"3":0,"4":{"1":{"1":"AClZvXKte+4mEwsFB7kw20LrbWQ6jOMxmK8j4At4Vxqc7w+5dDDYWIx2k1ldCvvGbAT59UClLSkQty6zyZZQSmgxKvpKhq22bKRfGy8ywt0B5L8WE53vo+YtI8ixM8Xe0RPixTjPtOLQA8sCZod+hvHxqU5Depi3I9XUV6JMn8uCOg67m+5oe5TT1L0OytnUBDIsjAaQ+kcldN23yGoppKKCs2Zf5XI6i7nk5QHehS8wvsDlugvkKSU3fUo3J+ZHJvoUXyCGLP3lP9Gh+6fOMir/SLrOJx8udRbtjTJhLsvXTXUN2QbjcEfFFAIaWfgMr5euHtYwYYWuMoI5ofZTc9L8sCY5pA0Q/CWyZ6QLH85XI70vxH6cBZtsnfrPLRh18cxSxFgzXuAwPHW8+CueCznqiHcY7gOhxQc2YWmSgwMIP9Cpgr089dWoB58wulcK0g+EqnTJiQdI9MMUj4zzLpu5DYja5ftP7lF3jeCSuKT9q70B9OqMDvlGlruZd2hhHe3k5S+LoyWo/4WZDUTvWpCMmnPzCP3R4OIQnrhS0s5ffOVxjyNHrXJXtrNhppap3BY4iByIn1cowMfVFfx3hNep0JW59db9fVuXKaSy/mqHZKC1ToRM/UyCoSZ9ZjY/Ot091ptURLRYoTFal5TBbMKISgxn5UCz4vSoxVe1fC64dwXHatSzCCg9AjJOpKR4p/9smxOaKg73pmMHsEY98I6TJhvaeJ9o6lcHsG8PZnB6xNS4ZJHBtN1baHkrCHOfqaepMVyRCF2kPNhr9SgujjTTbiKGMUO3UVamOQQ5/EckTgFMr0PIda7PPw7op8qFEhxZmkoo9KgERcYLGHxzGePjfo0IiNbf7k50lgDipwk5ag3CI0tw3CtDicQn6isHwKOmlfSctrEGv/Fjlmcgjhl1sTAL/rTWxDCABKN7/OhdysBAOq0j6viFgzjM8WI0ZuYPIVIm19CQ+YGcOx77oiyxev+3sAj7uSJoYFslmgiZV4jrF5P+b+U/5fknRf2Ho8plAUh4AHweXMeaPFYZAYooe6jC79EzgizqXvx1H/HrKKQcaXdDZ1ivoOM/7DtzJbawzO7ALUnHkqR1ZYmw3+3E/pmsDXedYgzERWYWvJltS+P46iWYOS43SUVw+whDWZnjJOwVOFFLDWcg4ykfzNmbq4B/vUibrV1dCiRpTIXSP92xk1I8MCfQGiptqo5MiKttqJ9Orj7nrGXEDz5pJBTTem919nz5rNIjI/sus3GZ+G4rBE+9i1sJN0jxszvpRD2AKsl1KSOrPCuOBhpNbD2HnFgQd+EUw8CpH2MLZlrZ8l3cqzDVc5aeCQ1eiUKlONlZpIxZi5wE5HyKZRxC8ljtX5xe+Fpg8R8/yDarvAkjeb0yKzN/e893nEVz3CmF68pphNp71kjJtvwBS2JtSWhFc81Ys51GEw\u003d\u003d"}}},"3":""}","xsrf":"ABOvogI3FCm29t4pdIded8L-Q98R0Voy-Q:1535121289188"} 

أنا أقوم بترجمة القسم 2 من متغير المعلمات:
Google, , :
("1":0),
24 ("2":24),
("3":0),
: AClZvX....


يمكن حذف عدد من المعلمات ، فهي تأخذ القيم الافتراضية:

  • نوع الإعلانات: الكل ؛
  • الفترة: كل ما هو متاح ؛
  • القفل المتوقع: لا ؛
  • إظهار فقط لم يتم التحقق منه: لا.

تأتي عشرات أو مئات الكيلوبايت كرد فعل على عدد الإعلانات المطلوبة. أصعب شيء هو الرسومات "الممتدة" في النص (البيانات: image / gif ؛ base64 ....). وإذا لم يكن هناك من لم يتم التحقق منه ، فإن الإجابة بسيطة:

 {"result":{"4":1,"5":"","8":"0","9":0},"xsrf":"ABOvogLWqmyC7KH1zfvmPxk-Y69-Jzj5XQ:1535115074392"} 

إذا كانت هناك إعلانات ، فسيتم تضمينها هنا: النتيجة -> {5}.

بالنسبة إلى CPO الجديد:

 { "1":"ca-pub-8958890276790964", "2":{ "1":10, //  ,          "2":7, // -   "3":11, //  - 10;  - 1;  - 11; "5":{ "6":3 //      "7":3534 //    "14":"en" //  "16":[0] // 0 - ; 1 - ; 2 - . "18":"dfd.com" //   "24":"video" //   }, "7":""}, //          "3":"-2876348936240321457", //          "5":true //    . . } 

لا تحتاج إلى القيام بالطلبات الأولية ، يمكنك طلب الإعلانات على الفور.
SearchApprovals (هذه طريقة)

 {"1":"ca-pub-8958890276790964","2":{"2":100,"3":11,"5":{"16":[0]},"7":""},"5":true} 

Google, , :
100 ("2":100),
("3":11),
("5":{"16":[0]},
("7":"")


المعلمات والافتراضات الاختيارية:

  • الرقم التسلسلي للإعلان المطلوب الأول: 0 ؛
  • الفترة: كل ما هو متاح ؛

ردًا على ذلك ، نحصل على نفس الشيء تقريبًا كما هو الحال في حالة CPO القديمة. يختلف في كلمة واحدة فقط - اسم حاوية البيانات. في القديم هو "نتيجة" ، في الجديد هو "افتراضي".


الحصول على إعلان معين أمر بسيط ، خذ الرابط من الإجابة السابقة وقم بتنزيل الإعلان. لا توجد حماية هنا ، والوصول مجاني للجميع.

التفاصيل
رابط الإعلان. سنبحث عنه في الإجابة السابقة ، حيث تلقينا العديد من الكيلوبايتات من النص استجابةً لطلب الإعلانات.

حتى لا يوجد الكثير من التعليمات البرمجية غير المفهومة ، أعطي الإجابة على طلب إعلان واحد (وحتى ذلك الحين تم قطعه بلا رحمة ، كان أكثر من 10 مرات ، لم يبق سوى أهم شيء في الوقت الحالي):

 {"result":{"1":[{"1":0,"3":0,"4":{"1":"AClZvXJ2t4wiEZ/VZ0i54m0Qtqpi2DTqkI1kaPMTRi4LnsQn0iR5K1xBlFpS1xmJV7ko4a6qx5RcTkp7CzVjwoy5UDSWZ5jOCPLGRcoQdDt+wOk46bdr0yA\u003d"},"5":{"1":82,"2":0,"3":0,"4":"\u00GQ","13":"https://adwords-displayads.googleusercontent.com/da/b/preview.js?client\u003dasfe-arc-external-preview\u0026obfuscatedCustomerId\u003d5240877441\u0026creativeId\u003d288930210411\u0026htmlParentId\u003dad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60\u0026showVariations\u003dtrue\u0026sig\u003dACiVB_yMUjLwDjRO2T-0VAaVuRPt8uLHGQ","14":"https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/","15":"","17":"","18":"","20":"adv-5594449542310820","21":["domain1.com","domain2.com"]},"6":{"5":"-6668648012302470727","9":0},"7":1,"9":{"3":[{"1":{"1":"AClZvXLE9HJbFYq9TrAsXFgV4YkXsQt9lXp1xWjSB5aT5bFBpe4VNgo\u003d"},"2":"\u041/YHgdH4P"}}],"2":0.0,"3":"59917","4":1,"5":"","6":"ClD3Z2nP2P/////1/ff9oPjm7gU\u003d","7":"5751","9":0},"xsrf":"ABOvogJJJuNM1d0i22yN48ibBAY8vpvC_A:1535125743731"} 

من المعلمة {13} يمكنك الحصول على رابط الإعلان:

https://adwords-displayads.googleusercontent.com/da/b/preview.js؟client=asfe-arc-external-preview&obfuscatedCustomerId=5240877441&creativeId=288930210411&htmlParentId=ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60&showVariations=true&sig=ACiVB_yMUjLwDjRO2T-0VAaVuRPt8uLHGQ .

لبعض الوقت (أيام ، ربما أسابيع) سيعيش الرابط ويمكن لأي شخص الحصول على إعلان من خلاله. هناك حوالي 100-150 كيلوبايت ، وفي الجزء السفلي (وليس فقط) يمكنك العثور على مقتطفات من نص الإعلان.

بالإضافة إلى ذلك ، هذه معلمة مهمة - هذا هو المعرف الداخلي للإعلان ، والذي سنستمر في استخدامه للإدارة (حظر / إلغاء حظر الإعلان ، حظر / إلغاء حظر حساب AdWords الذي يقوم بفك هذا الإعلان ، طلب إحصائيات الظهور ، ضبط العلامة على "محدد" ، إرسال رسالة حول انتهاك القواعد) . يتم تخزينه هنا:
النتيجة -> {1} -> {4} -> {1}.

يبدو هذا:

AClZvXJ2t4wiEZ/VZ0i54m0Qtqpi2DTqkI1kaPMTRi4LnsQn0iR5K1xBlFpS1xmJV7ko4a6qx5RcTkp7CzVjwoy5UDSWZ5jOCPLGRcoQdDt+wOk46bdr0yA=

يبلغ طوله 120 حرفًا (مع استثناءات نادرة).

هناك الكثير من المعلومات في دفق البيانات هذا:

  • نوع الإعلان.
  • عنوان URL المقصود
  • المجالات التي تم فكها.
  • معلومات عن المعلن (الاسم ، إن وجد ، والمعرف).
  • السمة النوعية لعدد مرات الظهور ، على سبيل المثال ، "عالية".
  • ثلاث صور مصغرة للصفحة المقصودة على شكل بيانات: صورة.
  • الفئة التي ينتمي إليها الإعلان ، على سبيل المثال ، الهاتفية.

يتم الحصول على النتيجة - إنها تفسح المجال للأتمتة. بعد ذلك ، تم وضع الترتيب في الوظائف ، لأن النموذج الأولي للعمل كان فظيعًا ، أردت فقط أن أفهم بسرعة ما إذا كانت العملية ستكون تلقائية. تم تقديم النسخة الأولى للناس وبدأ إتمام وتصحيح الأخطاء. المشكلة الأولى هي أن "مرحلتين" لا يمكن تسجيل الدخول.

تفويض من خطوتين


إذا ذهبت للتحقق من كيفية ظهور JS في وضع إيقاف التشغيل ، يمكنك مشاهدة العديد من خيارات التفويض: كلمة مرور SMS ، وكلمات المرور لمرة واحدة من قطعة ورق ، من خلال التطبيق ...
أتمتة كل خيار بحيث يكون الجميع مرتاحين - يمكنك الجنون.

المطور الانقاذ


عندما كنت بدون JS في Chrome ، نظرت إلى آلية التفويض على مرحلتين ، ورأيت إشارة إلى اختيار طريقة أخرى ، لقد أصبحت مدمنًا على ذلك. مهما كانت الطريقة المحددة افتراضيًا ، هناك دائمًا خيار للانتقال إلى التحديد وتحديد SMS. كان هذا خلاصًا حقيقيًا. بالطبع ، كان علي أن أتحقق من الطريقة المختارة بشكل افتراضي ، وفي حالة الطريقة "غير الصحيحة" ، اضغط على زر التغيير وحدد "كلمة المرور لمرة واحدة عن طريق الرسائل القصيرة".

بالنسبة للتفويض نفسه ، قمت للتو بحفظ البيانات الوسيطة من النموذج في الملف (نفس مجموعة جميع الحقول المخفية) ونموذج إدخال كلمة المرور لمرة واحدة. هذا كل شيء ، كانت "مرحلتان" قادرة أيضًا على الدخول.

إتمام عملية الإنشاء


تم الانتهاء من المهمة الرئيسية - يمكن لأي شخص تثبيت واستخدام حل آلي لتصفية الإعلانات بشكل دوري على مواقعهم.

بعد ذلك جاءت التحسينات ، التحسينات ، تصحيح أوجه القصور ...
... تم تحديدها من قبل المستخدمين وبشكل مستقل ، صقل التصميم الخارجي (كان بديهيًا للمؤلف غير مفهوم للجميع تقريبًا).
كما تم استكمال وظائف وفلاتر مختلفة وإضافتها للبحث عن الإعلانات المرفوضة. على سبيل المثال ، للكشف تلقائيًا عن تجزئة الحروف السيريلية واللاتينية. لا ينشئ المعلنون العاديون إعلانات مثل هذا ، ولكن في بعض الأحيان تكون هناك أخطاء في شكل خلط في الكلمات الروسية ذات حرف لاتيني واحد (يتم أيضًا أخذ الأخطاء الشائعة في الفلتر في الاعتبار).

الإضافات المضافة للراحة:

  • قائمة المعلنين المحظورين.
  • قائمة المجالات المحظورة.
  • تسمية الدخل.
  • روابط AdSense.

إن قائمة المعلنين المحظورين هي فرصة للمشاهدة والتحرير ، وهي أكثر ملاءمة (ولكنها ليست أجمل في المظهر) من الواجهة العادية! بالإضافة إلى أن هناك إمكانية لفتح "بكميات كبيرة" ، وهو ليس في AdSense العادي.

قائمة المجالات المحظورة تشبه القائمة السابقة.

القدرة على العمل مع AdX (من خلال AdManager ، حيث انتقل AdX مؤخرًا).

هناك العديد من التحسينات ، والأكثر إثارة للاهتمام في رأيي مذكورة أعلاه.


وظائف إرسال طلب وتلقي نتيجة


في السابق ، كتبت عن الطلبات في شكل سلاسل json ، ووعدت بفتحها بمزيد من التفاصيل لاحقًا.

عندما تم تنفيذ كل هذا من قبل CPO الجديد ، لم يكن هناك حتى الآن ، لذلك تم عمل كل شيء للمسنين ، سنبدأ منه.

التواصل مع CPO القديم


بمساعدة الملاحظات ، كان من الممكن معرفة أن التبادل الرئيسي للطلبات يذهب إلى عنوان واحد:

  https://www.google.com/adsense/gp/creativeReview؟ov=3&pid=pub-8958890276790964&authuser=0&tpid=pub-8958890276790964(&hl=ar) 


ما لا يوجد دائمًا بين قوسين هو مجرد معلمة تشير إلى لغة الإجابة ؛ يمكن تطبيقها على جميع منتجات Google تقريبًا. هذا مهم ، لأنني أستخدم اللغة الإنجليزية في كل مكان ، ويتعرف البرنامج على بعض المعلمات ، في انتظار إجابة باللغة الإنجليزية.

بالإضافة إلى العنوان ، هناك شكل قياسي للبيانات اللاحقة المرسلة (في أدوات المطور تكون مرئية في قسم "طلب الحمولة") - هذه سلسلة json مع الطريقة والمتغيرات والمتغيرات xsrf:

 {"method":"getArcSettings","params":"{\"1\":[\"ca-pub-8958890276790964\"]}","xsrf":"ABOvogJlvXKkBQUbPYEsM04recgCsukFMg:1535467881599"} 

الطريقة - يبدو أن كل شيء واضح هنا.
المعلمات - اعتمادًا على الطريقة ، تنسيقها القياسي الخاص بسلسلة json المرسلة.
xsrf - الإيصال الأولي للرمز الرقمي الذي نستخدمه للطلب موصوف أعلاه ، وفي الرد نتلقى رمز XSRF جديد للطلب التالي.

تأتي الإجابة أيضًا في شكل سلسلة json من أجزاء النتيجة (المعلومات المطلوبة) و xsrf:

 {"result":{"1":[{"1":"ca-pub-8958890276790964","2":{"1":"ca-pub-8958890276790964","2":0},"3":{"1":"ca-pub-8958890276790964","2":0}}]},"xsrf":"ABOvogIH7wJjD8t1xmuu8WbGplQowqjjJA:1535467883406"} 

كود وظيفة PHP
 function creative_review($method, $params) { $xsrftoken = file_get_contents($GLOBALS['xsrftoken_file']); $creativeReview = new stdClass(); //to make json request string $creativeReview->method = $method; $creativeReview->params = $params; $creativeReview->xsrf = $xsrftoken; $creativeReview_post_request = json_encode($creativeReview); unset($creativeReview); $result = curl_post($GLOBALS['creative_review_req_string'], $creativeReview_post_request, $GLOBALS['arc_tab_req_string'], $GLOBALS['myheaders']); $result = json_decode($result); // decode result string if ($result->xsrf) file_put_contents($GLOBALS['xsrftoken_file'], $result->xsrf); // Renew standard XSRF token return $result; } 

post- — curl_post($url, $postfields, $referer, $myheaders).

.
$myheaders :

 accept-language:en-US;q=1,en;q=0.4
content-type:application/javascript; charset=UTF-8 


$GLOBALS['creative_review_req_string']:

 https://www.google.com/adsense/gp/creativeReview?ov=3&pid=pub-8958890276790964&authuser=0&tpid=pub-8958890276790964&hl=en 


, .

$GLOBALS['arc_tab_req_string']:

 https://www.google.com/adsense/new/u/0/pub-8958890276790964/main/allowAndBlockAds?webPropertyCode=ca-pub-8958890276790964&tab=arcTab 

referer , .

التواصل مع CPO الجديد


هنا مع عنوان الطلب أكثر تعقيدا - يتغير. لا يوجد سوى الجزء المشترك الأولي. المخطط هو كما يلي:

الجزء العام + الطريقة + "؟" + معلمات GET + rpcTrackingId = <تكرار معلمات GET السابقة في ترميز URL> + ':' + <رقم تسلسل الطلب باستخدام نفس الطريقة داخل ... بشكل عام ، حتى يقوم المستخدم بتحديث الصفحة>.

https://www.google.com/ads-publisher-controls/acx/5/proto/creativereview/GetArcSettings?hl=ru&pc=ca-pub-8958890276790964&onearcClient=adsense&rpcTrackingId=%2Fads-publisher-controls%2Facx%2F5%2Fproto%2Fcreativereview%2FGetArcSettings%3Fhl%3Dru%26pc%3Dca-pub-8958890276790964%26onearcClient%3Dadsense%3A1

يتم تمرير XSRF-token هنا في العنوان 'x-framework-xsrf-token' وهو قابل لإعادة الاستخدام ، وبالتالي ، لا يأتي في الإجابات وليس من الضروري تحديثه باستمرار.

كود وظيفة PHP
 function creative_review_new($method, $params) { if (!isset($GLOBALS['xsrftoken_new'])) $GLOBALS['xsrftoken_new'] = file_get_contents($GLOBALS['temp_folder'] . 'xsrftoken_new.txt'); $myheaders = $GLOBALS['myheaders_new']; $myheaders[] = 'x-framework-xsrf-token:' . $GLOBALS['xsrftoken_new']; $query['pc'] = 'ca-' . $GLOBALS['pub_id']; $query['onearcClient'] = 'adsense'; $query['hl'] = 'en_US'; foreach ($query as $index => $value) $rpc[] = $index . '=' . $value; if(!isset($GLOBALS[$method_count])) { $GLOBALS[$method_count]=1; } else { $GLOBALS[$method_count]++; } $append = ':'.$GLOBALS[$method_count]; $query['rpcTrackingId'] = $GLOBALS['creative_review_new_string'] . $method . '?' . implode('&', $rpc) . $append; $query = http_build_query($query); $url = 'https://www.google.com' . $GLOBALS['creative_review_new_string'] . $method . '?' . $query; $result = curl_post($url, $params, $GLOBALS['new_arc_tab_req_string'], $myheaders); if (mb_strpos($result, 'Error 400 (Not Found)', 0, 'UTF-8') !== false) { return '-32000 XSRF token validation'; } $list = explode("\n", $result, 2); $result = $list[1]; $result = json_decode($result); // decode result string if (@$result->default->{5}) file_put_contents($GLOBALS['temp_folder'] . 'some_digi_token.txt', $result->default->{5}); // Renew token if (@$result->default->{6}) file_put_contents($GLOBALS['temp_folder'] . 'some_long_token.txt', $result->default->{6}); // Renew token 

post- — curl_post($url, $postfields, $referer, $myheaders).

$myheaders (javascript → json):

 accept-language:en-US;q=1,en;q=0.4
content-type:application/json; charset=UTF-8 


$GLOBALS['creative_review_new_string']:

 /ads-publisher-controls/acx/5/proto/creativereview/ 
.

$GLOBALS['new_arc_tab_req_string']:

 https://www.google.com/adsense/new/u/0/pub-8958890276790964/arc/ca-pub-8958890276790964 
referer , .

. «» . (« 10 , 30-»). , .


استعلام قائمة المجال ووظيفة الإدارة


إنها تقريبًا نفس وظيفة الاتصال مع CPO القديم ، وهي تختلف فقط في عنوان الاستئناف.

كود وظيفة PHP
 function blocking_controls($method, $params) { $xsrftoken = file_get_contents($GLOBALS['xsrftoken_file']); $creativeReview = new stdClass(); //to make json request string $creativeReview->method = $method; $creativeReview->params = $params; $creativeReview->xsrf = $xsrftoken; $creativeReview_post_request = json_encode($creativeReview); unset($creativeReview); $result = curl_post($GLOBALS['blocking_controls_req_string'], $creativeReview_post_request, $GLOBALS['arc_tab_req_string'], $GLOBALS['myheaders']); $result = json_decode($result); // decode result string if ($result->xsrf) file_put_contents($GLOBALS['xsrftoken_file'], $result->xsrf); // Renew standard XSRF token return $result; } 

$GLOBALS['blocking_controls_req_string']:
 https://www.google.com/adsense/gp/blockingControls?ov=3&pid=pub-8958890276790964&authuser=0&tpid=pub-8958890276790964 
.

يتم حفظ رموز XSRF المميزة على القرص في ملف ، فمن الضروري لطلبات حظر / إلغاء حظر الإعلانات وحسابات AdWords والإجراءات الأخرى أن تعمل مباشرة من لوحة التحكم دون الحاجة إلى طلب واحد جديد.

معالجة الردود المستلمة


تأتي البيانات إما على شكل سلاسل json (الإجابات التي تتلقاها الوظائف الثلاث أعلاه) وفي شكل كود JS (الإعلانات المطلوبة) ، حيث يتم "تشفير" سلسلة من الأحرف بترميز سداسي عشري (\ x <رمز حرف مكون من حرفين>).

مقتطف من الإعلان المشار إليه أعلاه:
الهدف \ x3d_blank title \ x3d \ x22 \ x22 \ x3e \ x3cspan \ x3e قم بشراء Xiaomi Redmi S2 واحصل على Redmi 5 \ x3cbr \ x3e كهدية. من 24 أغسطس إلى 26 أغسطس. اعرف المزيد على الموقع.

بالنسبة إلى json ، هناك دالة في php ستنتج كائنًا على الأقل ، على الأقل صفيفًا.
بالنسبة إلى "Kosoiks" في مكان ما من الشبكة ، وجدت وظيفة صغيرة تنقل البيانات إلى الشكل البشري.

كود وظيفة PHP
 function hex_repl($html) { $i = 256; while ($i >= 0) { $hex = dechex($i); $html = str_ireplace("\x$hex", chr($i), $html); $i--; } return $html; } 

نتيجة فك التشفير:
target = _blank title = ""> <span> اشترِ Xiaomi Redmi S2 واحصل على Redmi 5 <br> كهدية. من 24 أغسطس إلى 26 أغسطس. <br> المزيد من المعلومات على الموقع.

التعرف على الإعلان


نص . لقد بدأت معهم. كانت أكثر أهمية ، وكما اتضح ، كان كل شيء أسهل بكثير معهم. هناك نوعان فقط: قديم ، مع عنوان واحد (الذي اختفى تقريبًا) وجديد ، مع عنوانين.

يأتي الإعلان بالفعل على شكل كود HTML ، ولكن بالإضافة إلى الإعلان ، يحتوي الرد الذي نتلقاه على الكثير من البيانات التي لا نحتاجها - كود جافا سكريبت (لم يدخل حتى في جوهر هذا الرمز).

جاء الاعتراف في النهاية إلى الخطوات التالية:

  • تقليم "البداية الكبيرة" ، مع ترك "الذيل" فقط ، الذي يحتوي على نص الإعلان ؛
  • إنشاء كائن باستخدام فئة DOMDocument
  • ابحث في الحلقة عن القيم المطلوبة: العناوين ونص الإعلان ونص الرابط.

تحتوي العناوين والنصوص والارتباطات على فئات معينة ، ويتعرف "أداة التعرف" عليها.

ما هو مكان ووظيفة معالجة الإعلانات النصية
rhtitleline1 — 1;
rhtitleline2 — 2;
rhtitle — ( );
rhbody — ;
rhurl — URL.

 function text_ad($html) { $list = explode('</head>', $html); $ad_html = array_pop($list); unset($list, $html); $dom = new DOMDocument('1.0', 'UTF-8'); @$dom->loadHTML($ad_html); unset($ad_html); foreach ($dom->getElementsByTagName('a') as $a_node) { if (stripos($a_node->getAttribute('class'), 'rhtitleline1') !== false) { $ad['header1'] = $a_node->textContent; continue; } if (stripos($a_node->getAttribute('class'), 'rhtitleline2') !== false) { $ad['header2'] = $a_node->textContent; continue; } if (stripos($a_node->getAttribute('class'), 'rhbody') !== false) { $ad['body'] = $a_node->textContent; continue; } //Old ads (with just 1 header) support if (stripos($a_node->getAttribute('class'), 'rhtitle ') !== false || stripos($a_node->getAttribute('class'), 'rhtitle"') !== false) { $ad['header1'] = $a_node->textContent; continue; } if (stripos($a_node->getAttribute('class'), 'rhurl ') !== false || stripos($a_node->getAttribute('class'), 'rhurl"') !== false) { $ad['displayUrl'] = $a_node->textContent; continue; } } $fulltext = implode(' ', $ad); $ad['fulltext'] = $fulltext; if (!isset($GLOBALS['set_gl']['utf8_off'])) foreach ($ad as $index => $value) $ad[$index] = utf8_decode($value); return $ad; } 

— . .

$fulltext — .

utf8_decode . DOMDocument . .


الرسم . يتحققون فقط من عنوان URL المقصود. لا يوجد التعرف على الصور ، حفظ الصور للفحص أيضًا (لأن الصور ، إذا رغبت في ذلك ، يمكن أيضًا عرضها في CPO). لا أرى أي سبب هنا لإعادة اختراع العجلة (على الأرجح منحنى ولا يحتاجها أحد).

الوسائط المتعددة . تحت هذا الاسم الشائع يخفي عدد من الإعلانات المختلفة:

  • تنسيق متعدد.
  • الوسائط (الوسائط المتعددة التفاعلية).
  • نموذج مخصص (HTML5).

تم إنشاء دالات التعرف متعددة التنسيقات 3 بناءً على نوع الإعلان.
بالنسبة للوسائط ، تم إنشاء وظيفتين.

بالنسبة إلى HTML5 ، تم إنشاء 3 وظائف.

التصفية


بعد التعرف على الإعلانات ، تبدأ عملية تحديد المرفوض وفقًا لمعايير مختلفة (يتم تضمين جميع الفلاتر ، وبعضها قابل للتخصيص):

  • التواجد في المجال "blogspot.com".
  • الوجود في كلمات مزيج من الحروف السيريلية واللاتينية.
  • وجود الكلمات "السيئة" (يمكن تخصيص قائمة الكلمات "السيئة" من قبل المستخدم).
  • إعادة توجيه المستخدم إلى مجال آخر غير النطاق الأصلي.

تقرير العمل


بناءً على نتائج الترشيح ، يتم تجميع تقرير التقدم.
تم تصميمه على شكل قائمة إعلانات لكل فلتر في عموده ، بالإضافة إلى رسم بياني للإعلانات "الجيدة" ، يتم تضمين المعلومات التالية في التقرير:

  • معرّف المعلن واسمه النصي ، إن وجد.
  • سبب المنع (للممنوع فقط).
  • العناوين ونص الإعلان.
  • عنوان URL المقصود والعرض.
  • تاريخ ووقت التحقق.
  • إجمالي عدد المشاهدات التي نجحت في الحصول على إعلان (للممنوع فقط).
  • روابط لحظر / إلغاء حظر الإعلانات وحسابات المعلنين.
  • روابط لحظر عنوان URL المقصود أو المجال.
  • رابط لتقديم شكوى حول الإعلان (متوفر في CPO الجديد).
  • روابط لإضافة أجزاء مختلفة من الإعلان إلى القائمة البيضاء.
  • رابط لحذف إعلان من التقرير.

يعتمد المظهر على أساس CPO القديم (والوحيد في وقت التصميم).


قابل للنقر


عند عرضه من هاتف جوال ، يشغل كل عمود عرض الشاشة بالكامل وتظهر الأزرار لتحديد العمود الذي تعرضه.

قليلا عن الأمن


يمكنك الوصول المحدود إلى لوحة التحكم (للتحكم في نفسك من مكان واحد) أو "حول العالم" بحيث يمكنك التحكم من أي مكان.

الحالة الأولى آمنة - لن يصلح أحد إذا لم يجلس على جهاز كمبيوتر يعمل. في الحالة الثانية ، يجب إبقاء العنوان الذي يوجد فيه البرنامج سراً ، بالإضافة إلى توفير كلمة المرور للدخول إلى لوحة التحكم. لمنع عنوانك السري من "التسرب" عند اتباع الروابط لمواقع الطرف الثالث (من الإعلانات) ، تم القيام بما يلي:

  • كل رابط خارجي له مثل هذه السمة
     rel = "noreferrer" 
  • للإشارة التي تم تمريرها فقط داخل نفس المجال في الرأس هي علامة:
     <meta name = "referenceer" content = "same-origin"> 
  • تمر جميع الروابط الخارجية بمنظف المُحيل:
     http: //nullrefer.com/؟ http: //free.da ... 

نتيجة الأتمتة


24 ساعة 7 أيام في الأسبوع ، يتم فحص كل ما يظهر حديثًا في إعلانات CPO على فترات تستغرق دقيقتين. ونتيجة لذلك ، يتم إرسال مرفوض (وفقًا للمعايير المحددة من قبل المستخدم) إلى قسم "محظور". لم أحسبها قط بالتأكيد ، ولكن من بين حوالي 100 قطعة محظورة ، تم قفل 90-95 لسبب وجيه. من بين مائة برنامج "نظيف" ، في المتوسط ​​، أقل من واحد "سيئ".

ماذا أسمي "إعلانات سيئة"؟ كل ما يؤدي إلى الاشتراكات عبر الهاتف المحمول ، وكل شيء يوفر "تنزيل" ، أو تنزيل أو "تنزيل ملف" فقط دون أي تفاصيل على الإطلاق ، وكل شيء يقدم "مشاهدة فيديو" ، مرة أخرى بدون أي تفاصيل ، كل شيء لا يؤدي إلى أي شيء على الإطلاق كما هو مبين في عنوان ونص الإعلان ، أي ذكر للكازينوهات في البلدان التي يحظرها القانون.

ونتيجة لذلك ، لا أقضي عملي وقتًا في البحث عن الإعلانات وحظرها ، وأصبحت إعلانات الكازينو ومتاجر البقالة المختلفة الموزعة عبر مواقعي أصغر بعشر مرات (للأسف ، لم يتم حل المشكلة تمامًا - أنا لا أتوقف عن التفكير فيها).

أصبحت السرقة في شكل اشتراكات فاقد الوعي أقل بدون بطاقة MegaFon!

وأين تأتي بطاقة MegaFon؟
« » « » « »:
«» , . , .

لكن ليس لدى جميع مستخدمي مواقعنا MegaFoncards ونظائرها من PPSOS الأخرى.
لذلك ، أيها السادة ، قم بحماية زوارك من الرسوم غير المرغوب فيها بنفسك!

مشروع المصدر المفتوح موجود على جيثب .

Source: https://habr.com/ru/post/ar422379/


All Articles