Kullanıcı:ToprakBot/AWB modülleri/upright

Vikipedi, özgür ansiklopedi
Piksel upright çevirici

Küçük resimlerde piksel olarak belirtilen boyutlandırmayı upright şekline çevirir. Kullanıcıların "küçük resim boyutu" tercihinin işe yaraması için gereklidir. Bkz Tartışma

Diğer modüllerin aksine AWB'nin "External processing" aracı kullanılarak ayrıca çalıştırılır.

//AutoWikiBrowser - Piksel upright çevirici - V1
//Yazar: ToprakM
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;

async Task<float> FileRatio(string file) {
    string apiUrl = "https://commons.wikimedia.org/w/api.php?action=query&prop=imageinfo&titles=File:" + file + "&iiprop=dimensions&format=json";

    int imageHeight = -1;
    int imageWidth = -1;

    using (var httpClient = new HttpClient()) {
        try {
            var response = await httpClient.GetStringAsync(apiUrl);
            var jsonObject = JObject.Parse(response);

            JObject pages = jsonObject["query"]["pages"] as JObject;

            if (pages != null) {
                foreach (JProperty pageProperty in pages.Properties()) {
                    JObject page = pageProperty.Value as JObject;

                    if (page != null && page["imageinfo"] is JArray imageInfoArray && imageInfoArray.Count > 0) {
                        int.TryParse(imageInfoArray[0]["height"].ToString(), out imageHeight);
                        int.TryParse(imageInfoArray[0]["width"].ToString(), out imageWidth);
                        break;
                    }
                }
            }

        }
        catch (Exception ex) {
            Console.WriteLine("Error: " + ex.Message);
        }

    }
    return (float)imageWidth / imageHeight;
}

string ArticleText = File.ReadAllText("inputoutput.txt"); // Maddeyi al

Regex kucukresim = new Regex(@"\[\[\s*?(Dosya|Resim|File|Image)\:\s*?.*?\s*?\|\s*?(thumb|küçükresim)\s*?(.|\n)*?\]\]", RegexOptions.IgnoreCase);

if (kucukresim.Match(ArticleText).Success) {

    ArticleText = kucukresim.Replace(ArticleText, delegate (Match match) {

        string DosyaMetin = match.Value;
        string piksel = "";

        Regex pikrgx = new Regex(@"\|\s*?(\d{0,4})(x(\d{1,4})|)\s*?(pik|px)", RegexOptions.IgnoreCase);

        if (pikrgx.Match(ArticleText).Success) {

            var aracı = pikrgx.Match(DosyaMetin);
            string px1 = aracı.Groups[1].Value;
            string px2 = aracı.Groups[3].Value;

            Regex isim = new Regex(@"(Dosya|Resim|File|Image)\s*:\s*(.*?)\s*\|", RegexOptions.IgnoreCase);
            var aracı2 = isim.Match(DosyaMetin);
            string file = aracı2.Groups[2].Value;
            Console.WriteLine("\nDosya: " + file);

            if ((px1 == px2) && (px1!=""||px2!="")) {
                Console.WriteLine("Oran hesaplanacak.");
                piksel = px1;
                float oran = FileRatio(file).Result;
                if (oran < 1) {
                    float ara = oran * float.Parse(piksel);
                    piksel = ara.ToString();
                } else piksel = px1;
            } else if ((px1=="") &&  (px2!="")) {
                Console.WriteLine("Oran hesaplanacak.");
                piksel = px2;
                float oran = FileRatio(file).Result;
                float ara = oran * float.Parse(piksel);
                piksel = ara.ToString();
            } else Console.WriteLine("Oran hesaplanmayacak.");
        }

        float upright;
        if (float.TryParse(piksel, out upright)) {

            upright = (float)Math.Round(upright / 220, 2);
            string uprightStr = upright.ToString();
            uprightStr = uprightStr.Replace(",", ".");

            Regex sıfıryokedici = new Regex(@"(\d)(\.00|(\.\d)0)");
            if (sıfıryokedici.Match(uprightStr).Success) uprightStr = sıfıryokedici.Replace(uprightStr, "$1$3");

            DosyaMetin = pikrgx.Replace(DosyaMetin, "|upright=" + uprightStr);

            return DosyaMetin;
        } else return match.Value;
    });
}

File.WriteAllText("inputoutput.txt", ArticleText); // Maddeyi gönder