%PDF- %PDF-
Direktori : /data/ntb/vintedDown/ |
Current File : //data/ntb/vintedDown/User.cs |
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Net; using System.Runtime.ConstrainedExecution; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace vintedDown { public class User { #if DEBUG private const string _BASE_FOLDER = "c:\\tmp\\vinted"; #else private const string _BASE_FOLDER = "/www/varak.cloud/img.varak.cloud/img/vinted_down"; #endif private List<string> photos; private CookieContainer cookieContainer; public User(string baseAddress, string id) { BaseAddress = baseAddress; Id = id; UserId = id; photos = new List<string>(); if (!Directory.Exists($"{_BASE_FOLDER}{BaseAddress}/{Id}")) { Directory.CreateDirectory($"{_BASE_FOLDER}/{BaseAddress}/{Id}"); } } public User(string baseAddress, string id, bool isOneItem) { BaseAddress = baseAddress; Id = id; IsOneItem = isOneItem; } public string BaseAddress { get; set; } public string Id { get; set; } public string UserId { get; set; } public bool IsOneItem { get; set; } = false; public async Task LoadItems() { await GetAuthCookies(); if (IsOneItem) { await LoadSingleItem(); return; } var baseAddr = "https://" + BaseAddress + "/api/v2/users/" + Id + "/items?page={0}&per_page=96&order=relevance"; var hasPage = true; for(var i = 1; hasPage; i++) { var jsonString = await GetAsync(string.Format(baseAddr, i)); var data = JsonConvert.DeserializeObject<ApiUser.Root>(jsonString, new JsonSerializerSettings() { Error = (sender, error) => error.ErrorContext.Handled = true }); foreach(var item in data.items) { foreach(var photo in item.photos) { photos.Add(photo.full_size_url); } } if(i == data.pagination.total_pages) { hasPage = false; } } } public async Task SaveItems(string path = "") { foreach (var photo in photos) { await GetAsyncSave(photo); } } private async Task LoadSingleItem() { var baseAddr = "https://" + BaseAddress + "/api/v2/items/" + Id + "?localize=false"; var jsonString = await GetAsync(baseAddr); var data = JsonConvert.DeserializeObject<ApiItemNew.Root>(jsonString, new JsonSerializerSettings() { Error = (sender, error) => error.ErrorContext.Handled = true }); if (data == null) return; photos = new List<string>(); UserId = data.item.user_id.ToString(); if (!Directory.Exists($"{_BASE_FOLDER}/{BaseAddress}/{UserId}")) { Directory.CreateDirectory($"{_BASE_FOLDER}/{BaseAddress}/{UserId}"); } foreach (var photo in data.item.photos) { photos.Add(photo.full_size_url); } } private async Task GetAuthCookies() { cookieContainer = new CookieContainer(); var uri = $"https://{BaseAddress}/member/{Id}"; Console.WriteLine("[{0}] GET {1}", DateTime.Now.ToString("u"), uri); using var handler = new HttpClientHandler() { CookieContainer = cookieContainer }; var _client = new HttpClient(handler); _client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"); using HttpResponseMessage response = await _client.GetAsync(uri); } private async Task<string> GetAsync(string uri) { Console.WriteLine("[{0}] GET {1}", DateTime.Now.ToString("u"), uri); using var handler = new HttpClientHandler() { CookieContainer = cookieContainer }; var _client = new HttpClient(handler); _client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"); using HttpResponseMessage response = await _client.GetAsync(uri); return await response.Content.ReadAsStringAsync(); } private async Task GetAsyncSave(string uri) { Console.WriteLine("[{0}] GET {1}", DateTime.Now.ToString("u"), uri); using var handler = new HttpClientHandler() { CookieContainer = cookieContainer }; var _client = new HttpClient(handler); _client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"); using HttpResponseMessage response = await _client.GetAsync(uri); var data = await response.Content.ReadAsByteArrayAsync(); var bits = uri.Split("/", StringSplitOptions.RemoveEmptyEntries); var filename = GetFileNameFromUrl(uri).Split(".")[0] + "_" + bits[3] + ".jpg"; File.WriteAllBytes($"{_BASE_FOLDER}/{BaseAddress}/{UserId}/" + filename, data); } private string GetFileNameFromUrl(string url) { Uri SomeBaseUri = new Uri("http://canbeanything"); Uri uri; if (!Uri.TryCreate(url, UriKind.Absolute, out uri)) uri = new Uri(SomeBaseUri, url); return Path.GetFileName(uri.LocalPath); } } }