کافه بازار رو دور بزنیم و فایل APK اپلیکیشن هارو دانلود بکنیم

به پیشنهاد یکی از دوستان امروز تصمیم گرفتم تا براش یه برنامه بنویسم تا بتونه فایل APK اپلیکیشن های کافه بازار رو داخل ویندوز دانلود کنه و دیگه نیازی به استفاده از اپلیکیشن اندروید بازار نباشه از اونجایی که ایده خوبی بود و منم وقتم خالی بود شروع کردم به نوشتن این اپلیکیشن که با گرفتن پیکیج نیم یا لینک کافه بازار فایل APK رو دانلود میکنه. اما چطور؟ قراره در این پست به این مطلب بپردازم و راه کار رو توضیح بدم.APIکافه بازار برای دانلود اپلیکیشن ها داخل برنامه خودش به کمک API ها با سرور در ارتباطه و هر اپلیکیشنی که توسط کاربر انتخاب میشه مشخصاتش رو ارسال میکنه به سرور و سرور هم ادرس فایل apk رو برای برنامه ارسال میکنه. پس ما باید اول ادرس api رو پیدا بکنیم و بعد همون درخواست هارو توسط برنامه خودمون به سرور ارسال بکنیم و نتیجه برگشتی رو پردازش بکنیم. نگران نباشید کار خیلی اسونی هستش? برای این کار من از زبان قدرتمند سی شارپ میخام استفاده بکنم?قدم اول: api رو پیدا کنراه حل: باید اپلیکیشن کافه بازار رو اسنیف کنیم (یه سرچ بزنید اسنیف اندروید و از برنامه های پیدا شده یکی رو استفاده کنید.)بعد از اسنیف کردن ما ادرس های زیر رو پیدا میکنیم:https://api.cafebazaar.ir/rest-v1/process/GetPageV2Requestهمینطور که از اسم این api مشخص هست ایتم های صفحه رو برای ما برمیگردونه که شامل لیست برنامه ها هستش که بصورت متد Post ارسال میشه نکته ای که خیلی عجیبه کافه بازار در واقع تمام مشخصات گوشی مارو از ایدی تا لوکیشن به سرورش ارسال میکنه!!! (ممنون از کافه بازار بابت رعایت حریم خصوصی)مشخصات ارسالی همراه با متد Postنتیجه درخواست (مشخصات دریافتی از متد پست)فراموش نشه که کافه بازار خودش یه کلید اعتبارسنجی ایجاد میکنه و همراه با متد Post در Header کد اعتبار سنجی رو ارسال میکنه.https://api.cafebazaar.ir/rest-v1/process/AppDetailsV2Requestاین ادرس مشخصات برنامه رو برای ما برمیگردونه این api هم باید بصورت Post ارسال بشه و نتیجه برگشتی مشخصات برنامه اعم از توضیحات، تصاویر و... هستش.https://api.cafebazaar.ir/rest-v1/process/ReviewRequestاین ادرس هم مثل api های قبلی باید بصورت Post ارسال بشه و نتیجه برگشتی شامل نظرات کاربرا به برنامه هستش.https://api.cafebazaar.ir/rest-v1/process/AppDownloadInfoRequestخب میرسیم به اصلی ترین api چیزی که ما دنبالش هستیم همین ادرس هستش، این متد رو هم باید بصورت متد Post ارسال کرد و دقیقا اطلاعاتی که بالاتر تو تصویر نشون دادم همراه متد باید ارسال بشه. اما نتیجه برگشتی به چه صورت هستش؟اطلاعات دریافتی از متد پستهمینطور که تو تصویر میبینید اطلاعات مهمی اینجا قرار داره، توکن، ادرس cdn ها، حجم برنامه، نسخه و... اما ما هنوز ادرس اصلی رو نداریم! پس اسنیف کردن رو تا دانلود کردن چند درصد از برنامه داخل اپلیکیشن بازار ادامه میدیم تا به لینک اصلی برسیمhttps://cafe.bzrcdn.net/1/Zactw8ybTgXT7uqonJ8SlA/1587556145/apks/7******467.apkبلاخره به ادرس بالا میرسیم که اگر دقت کنیم میبینیم توکن، و cdn به صورت مشخصی داخل لینک قرار میگیرن، پس اگر ما بخایم لینک دانلود هر برنامه ای رو پیدا بکنیم باید اول پکیج نیم برنامه رو با متد Post ارسال بکنیم بعد توکن و cdn رو بگیریم و این هارو باهم سرهم کنیم تا به لینک دانلود برسیم و در نهایت بوم! بزنیم دانلود?قدم دوم: خودت درخواست بفرست!ابتدا یه درخواست Post به ادرس زیر میزنیم:https://api.cafebazaar.ir/rest-v1/process/AppDownloadInfoRequestچون اطلاعات ارسالی باید بصورت جیسون باشه من یه جیسون پیشفرض ایجاد کردم البته اطلاعاتش رو * گذاشتم? داخل همین جیسون ما باید پکیج نیم رو مشخص کنیم که من با appID مشخصش کردم کد رو خلاصه کردم تا فقط نحوه کار رو نشون بدم.string json = @&quot {&quot&quotproperties&quot&quot:{&quot&quotandroidClientInfo&quot&quot:{&quot&quotadId&quot&quot:&quot&quot***************&quot&quot,&quot&quotadOptOut&quot&quot:false,&quot&quotandroidId&quot&quot:&quot&quot*************&quot&quot,&quot&quotcity&quot&quot:&quot&quotNA&quot&quot,&quot&quotcountry&quot&quot:&quot&quotNA&quot&quot,&quot&quotcpu&quot&quot:&quot&quotx86,armeabi-v7a,armeabi&quot&quot,&quot&quotdevice&quot&quot:&quot&quot&quot&quot,&quot&quotdpi&quot&quot:320,&quot&quothardware&quot&quot:&quot&quot&quot&quot,&quot&quotheight&quot&quot:1600,&quot&quotlocale&quot&quot:&quot&quot&quot&quot,&quot&quotmanufacturer&quot&quot:&quot&quotsamsung&quot&quot,&quot&quotmcc&quot&quot:432,&quot&quotmnc&quot&quot:11,&quot&quotmodel&quot&quot:&quot&quotSM-G920F&quot&quot,&quot&quotosBuild&quot&quot:&quot&quot&quot&quot,&quot&quotproduct&quot&quot:&quot&quotheroltektt&quot&quot,&quot&quotprovince&quot&quot:&quot&quotNA&quot&quot,&quot&quotsdkVersion&quot&quot:22,&quot&quotwidth&quot&quot:900},&quot&quotappThemeState&quot&quot:0,&quot&quotclientID&quot&quot:&quot&quot**********************&quot&quot,&quot&quotclientVersion&quot&quot:&quot&quot8.10.2&quot&quot,&quot&quotclientVersionCode&quot&quot:801002,&quot&quotisKidsEnabled&quot&quot:false,&quot&quotlanguage&quot&quot:2},&quot&quotsingleRequest&quot&quot:{&quot&quotappDownloadInfoRequest&quot&quot:{&quot&quotdownloadStatus&quot&quot:1,&quot&quotpackageName&quot&quot:&quot&quotappID&quot&quot,&quot&quotreferrers&quot&quot:[{&quot&quottype&quot&quot:11,&quot&quotextraJson&quot&quot:&quot&quot{\&quot&quotservices\&quot&quot:\&quot&quotvitrin\&quot&quot,\&quot&quotslug\&quot&quot:\&quot&quothome\&quot&quot}&quot&quot},{&quot&quottype&quot&quot:1,&quot&quotextraJson&quot&quot:&quot&quot{\&quot&quotservices\&quot&quot:\&quot&quotvitrin\&quot&quot,\&quot&quotindex\&quot&quot:3,\&quot&quottitle\&quot&quot:\&quot&quot1„71„9 1„51ƒ91†8 1Œ61”41…21„91†51„2\&quot&quot,\&quot&quotsource\&quot&quot:\&quot&quotnormal\&quot&quot,\&quot&quotis_shuffled\&quot&quot:false,\&quot&quotreferrer_identifier\&quot&quot:\&quot&quotquery_Trending Apps \\u0026 Games\&quot&quot}&quot&quot},{&quot&quottype&quot&quot:2,&quot&quotextraJson&quot&quot:&quot&quot{\&quot&quotservices\&quot&quot:\&quot&quotvitrin\&quot&quot,\&quot&quotindex\&quot&quot:0,\&quot&quotreferrer_identifier\&quot&quot:\&quot&quot\&quot&quot}&quot&quot},{&quot&quottype&quot&quot:17,&quot&quotextraJson&quot&quot:&quot&quot{\&quot&quotpackage_name\&quot&quot:\&quot&quotappID\&quot&quot,\&quot&quotservice\&quot&quot:\&quot&quotsejel\&quot&quot}&quot&quot}]}}}&quotحالا درخواست Post رو ارسال میکنیم:var data = new StringContent(json, Encoding.UTF8, &quotapplication/json&quot); using var client = new HttpClient(); client.DefaultRequestHeaders.Add(&quotAuthorization&quot, &quotBearer **************************&quot); var result = await client.PostAsync(&quothttps://api.cafebazaar.ir/rest-v1/process/AppDownloadInfoRequest&quot, data); result.EnsureSuccessStatusCode(); var resp = await result.Content.ReadAsStringAsync(); var parse = System.Text.Json.JsonSerializer.Deserialize<CafeModel.RootObject>(resp); string token = parse.singleReply.appDownloadInfoReply.token; در پایان که نتیجه رو برمیگردونیم، توکن و cdn رو میگیریم و لینک دانلود رو میسازیم:downloadLink = parse.singleReply.appDownloadInfoReply.cdnPrefix[0] + $&quotapks/{token}.apk&quotامیدوارم که لذت برده باشین، اینم از اپلیکیشنی که در پایان طراحی کردم?