const string INSTAGRAM_APPLICATION_NAME = "Instagram"; // for Realtime features #pragma warning restore IDE0051 // Remove unused private members // todo: implement Realtime status like "message seen" public static string BuildFbUserAgent(IInstaApi insta, string appName = FBNS_APPLICATION_NAME, string userLocale = "en_US") { var device = insta.GetCurrentDevice(); var dpi = int.Parse(device.Dpi.Replace("dpi", "")); var res = device.Resolution.Split('x'); var width = res[0]; var height = res[1]; var fields = new Dictionary <string, string> { { "FBAN", appName }, { "FBAV", insta.GetApiVersionInfo().AppVersion }, { "FBBV", insta.GetApiVersionInfo().AppApiVersionCode }, { "FBDM", $"{{density={Math.Round(dpi/ 160f, 1):F1},width={width},height={height}}}" }, { "FBLC", userLocale }, { "FBCR", "" }, // We don't have cellular { "FBMF", device.HardwareManufacturer }, { "FBBD", device.HardwareManufacturer }, { "FBPN", InstaApiConstants.INSTAGRAM_PACKAGE_NAME }, { "FBDV", device.HardwareModel }, { "FBSV", device.AndroidVer.VersionNumber }, { "FBLR", "0" }, // android.hardware.ram.low { "FBBK", "1" }, // Const (at least in 10.12.0) { "FBCA", AndroidDevice.CPU_ABI } }; var mergeList = new List <string>(); foreach (var field in fields) { mergeList.Add($"{field.Key}/{field.Value}"); } var userAgent = ""; foreach (var field in mergeList) { userAgent += field + ';'; } return('[' + userAgent + ']'); }
private static async Task WriteUsername() { var apiVersion = InstaApi.GetApiVersionInfo(); var dic = new Dictionary <string, string> { { "app_version", apiVersion.AppVersion }, { "X-IG-Capabilities", apiVersion.Capabilities }, { "everclear_subscriptions", "{\"inapp_notification_subscribe_comment\":\"17899377895239777\",\"inapp_notification_subscribe_comment_mention_and_reply\":\"17899377895239777\",\"video_call_participant_state_delivery\":\"17977239895057311\",\"presence_subscribe\":\"17846944882223835\"}" }, { "User-Agent", FbnsUserAgent.BuildRTUserAgent(InstaApi) }, { "Accept-Language", InstaApiConstants.ACCEPT_LANGUAGE.Replace("-", "_") }, { "platform", "android" }, { "ig_mqtt_route", "django" }, //{"pubsub_msg_type_blacklist","direct, typing_type"}, { "auth_cache_enabled", "0" }, }; //Debug.WriteLine(JsonConvert.SerializeObject(dic)); await WriteMap(10, dic); }
HttpRequestMessage GetRequest(ulong position) { HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, _requestUri); System.Globalization.CultureInfo currentCulture = GetCurrentCulture(); System.Globalization.CultureInfo.CurrentCulture = EnglishCulture; request.Headers.Add(InstaApiConstants.HEADER_USER_AGENT, InstagramApiSharp.ExtensionHelper.GenerateUserAgent(_instaApi.GetCurrentDevice(), _instaApi.GetApiVersionInfo(), _instaApi)); request.Headers.Add(InstaApiConstants.HEADER_ACCEPT_LANGUAGE, _instaApi.AcceptLanguage); request.Headers.Add(InstaApiConstants.HEADER_X_FB_HTTP_ENGINE, "Liger"); request.Headers.Add(InstaApiConstants.HEADER_X_FB_HTTP_IP, "True"); request.Headers.Add(InstaApiConstants.HEADER_X_FB_SERVER_CLUSTER, "True"); request.Headers.Range = new System.Net.Http.Headers.RangeHeaderValue((long)position, null); if (!string.IsNullOrEmpty(_etagHeader)) { request.Headers.Add("If-Match", _etagHeader); } if (!string.IsNullOrEmpty(_lastModifiedHeader)) { request.Headers.Add("If-Unmodified-Since", _lastModifiedHeader); } System.Globalization.CultureInfo.CurrentCulture = currentCulture; return(request); }