%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);
}
}
}