Stažení souboru (curl) a převod kodování (iconv?)

Stažení souboru (curl) a převod kodování (iconv?)
« kdy: 06. 09. 2024, 15:05:46 »
Zdravím,
rád bych se zeptal jak správně postupovat, když stáhnete soubor z netu stránku html (pomocí curl), a očividně v hlavičce je informace, že kódování je ve Windows-1250. Je zřejmé, že by se stažený soubor měl převést na UTF-8, ale nedaří se mi. Když se znaky nepřevedou tak následně vzniká problém, že v tom souboru nelze hledat české znaky s diakritikou. Takže pokud chci něco najít při parsování, např. pomocí podmínky if [[ "$line" =~ \<a(.*)\/a\> ]] tak do výsledku nikdy nebude zahrnuta ta část, která obsahuje ř, třeba slovo řešení. Tím pádem bude jakýkoliv výskyt kde jsou české znaky ignorován. Je tedy zřejmé, že je nutné stránku nejprve převést. Mohl byste mi někdo dát funkční řešení nejlépe pro ten curl. Já zkoušel iconv a prostě mi to nefunguje (žádný převod se nekonal). Takže nechci ani uvádět své špatné nefunční příklady.


Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #1 kdy: 06. 09. 2024, 16:34:52 »
Zdravím,
rád bych se zeptal jak správně postupovat, když stáhnete soubor z netu stránku html (pomocí curl), a očividně v hlavičce je informace, že kódování je ve Windows-1250. Je zřejmé, že by se stažený soubor měl převést na UTF-8, ale nedaří se mi. Když se znaky nepřevedou tak následně vzniká problém, že v tom souboru nelze hledat české znaky s diakritikou. Takže pokud chci něco najít při parsování, např. pomocí podmínky if [[ "$line" =~ \<a(.*)\/a\> ]] tak do výsledku nikdy nebude zahrnuta ta část, která obsahuje ř, třeba slovo řešení. Tím pádem bude jakýkoliv výskyt kde jsou české znaky ignorován. Je tedy zřejmé, že je nutné stránku nejprve převést. Mohl byste mi někdo dát funkční řešení nejlépe pro ten curl. Já zkoušel iconv a prostě mi to nefunguje (žádný převod se nekonal). Takže nechci ani uvádět své špatné nefunční příklady.

A spravne delas nic neposilej, protoze by sme se treba mohli inspirovat nebo pohorsit. Me to funguje - mam soubor s ř v kodovani  Win1250 na radku 2 a 8 a kdyz si ho v cyklu prectu a v ifu
Kód: [Vybrat]
if [[ "$LL" =~ ř ]]porovnam pres regex tak vse v poho. Mmch ani sem nepotreboval iconv

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #2 kdy: 06. 09. 2024, 18:49:42 »
Je zřejmé, že by se stažený soubor měl převést na UTF-8, ale nedaří se mi.
Na tom nic zřejmého není. To jste se vy rozhodl, že potřebujete převést soubor do UTF-8.

Mohl byste mi někdo dát funkční řešení nejlépe pro ten curl. Já zkoušel iconv a prostě mi to nefunguje (žádný převod se nekonal).

curl bez dalších parametrů posílá stažená data (soubor) na standardní výstup. Takže stačí je pomocí | poslat dál do konverzního programu. Zároveň curl na standardní výstup vypisuje další věci, jako progressbar, to je dobré vypnout parametrem -s.

iconv standardně čte ze standardního vstupu, zapisuje na standardní výstup a konvertuje do kódování daného aktuálním locale. Takže mu stačí parametrem -f určit vstupní kódování. Správné ale velmi komplikované by bylo načíst to z HTTP hlaviček, daleko jednodušší je, když víte, že je to Windows-1250, zadat to kódování napevno.

Takže příkaz, kterým stáhnete obsah souboru na adrese https://example.com a zkonvertujete ho z kódování Windows-1250 do kódování aktuálního locale, je:

Kód: [Vybrat]
curl -s https://example.com | iconv -f Windows-1250
« Poslední změna: 06. 09. 2024, 18:52:20 od Filip Jirsák »

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #3 kdy: 06. 09. 2024, 18:56:02 »
Me to funguje - mam soubor s ř v kodovani  Win1250 na radku 2 a 8 a kdyz si ho v cyklu prectu a v ifu
Kód: [Vybrat]
if [[ "$LL" =~ ř ]]porovnam pres regex tak vse v poho. Mmch ani sem nepotreboval iconv
Pravděpodobně máte terminál v kódování ISO 8859-2, ve kterém je „ř“ na stejné pozici, jako v kódování Windows-1250. Zkuste místo toho třeba „š“ a fungovat vám to přestane.

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #4 kdy: 06. 09. 2024, 20:21:41 »
Díky za odpovědi. Záhada vyřešena. Díky skriptu v pythonu, který mi zobrazil jaké tam je skutečně kódování, jsem zjistil, že jsem prostě zadával nesprávné kódování. Ono mě to nenapadalo, že i když ta stránka má nadepsáno Windows-1250 a zobrazuje se správně, ve skutečnosti, to nemusí být přesně Windows-1250. Teď už to zkonvertované je správně, ale ještě mám ve skriptu nějakou chybu, protože se nezformátoval celý soubor, tak to musím zkontrolovat, kde jsem chybu udělal.


Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #5 kdy: 09. 09. 2024, 09:35:32 »
Případně můžete příště použít HTTPie, které kódování řeší samo.

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #6 kdy: 10. 09. 2024, 21:50:22 »
Hlavně aby GPT znalo httpie. Nezná. Ptal jsem se jak to používat a dal příkazy http.

Kód: [Vybrat]
http GET https://api.example.com/data
http POST https://api.example.com/register username="novy_uzivatel" password="bezpečne_heslo"
http PUT https://api.example.com/users/1 name="Nové jméno" email="novy_email@example.com"
http DELETE https://api.example.com/users/1
http GET https://api.example.com/data "Authorization: Bearer váš_token"

Nevím jak funguje httpie, syntaxe je stejná jako u http? Spletl název nebo to vůbec nezná? curl je obecně známější což je výhoda. Ale zase httpie když by to najednou přeložil tak skript poběží rychleji.

Já bych nejspíš chtěl aby když komunikuju se stránkou tak aby se to tvářilo jako obyčejný prohlížeč (Používám Firefox) a dát do hlavičky takové ty věci ze kterých správci stránek zjišťují na jakém prostředí pracuju. Tak to by bylo dobré v budoucnu integrovat to skriptu na čem teď pracuju.

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #7 kdy: 11. 09. 2024, 08:33:07 »
ChatGPT nezná nic. I kdybyste se ho ptal na curl, může vám odpovědět parametry, které si vymyslí – nebo které jsou použitelné v jiné verzi curl a ne v té vaší. Nejlepší je podívat se do manuálu, v případě HTTPie zde: https://httpie.io/docs/cli Případně můžete použít HTTPie Desktop, kde si to naklikáte a pak se podíváte, s jakými parametry to pouští HTTPie na příkazové řádce.

Požadované kódování klient (prohlížeč) neposílá. Server prostě pošle dokument v tom kódování, ve kterém ho má, a je na klientovi, aby si s tím poradil.

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #8 kdy: 11. 09. 2024, 09:06:53 »
ChatGPT nezná nic. I kdybyste se ho ptal na curl, může vám odpovědět parametry, které si vymyslí – nebo které jsou použitelné v jiné verzi curl a ne v té vaší. Nejlepší je podívat se do manuálu, v případě HTTPie zde: https://httpie.io/docs/cli Případně můžete použít HTTPie Desktop, kde si to naklikáte a pak se podíváte, s jakými parametry to pouští HTTPie na příkazové řádce.

Požadované kódování klient (prohlížeč) neposílá. Server prostě pošle dokument v tom kódování, ve kterém ho má, a je na klientovi, aby si s tím poradil.

no GPT to zna, protoze ma pristup k internetu....
Kód: [Vybrat]
HTTPie je nástroj pro příkazový řádek (CLI) určený pro komunikaci s HTTP servery a API. Je navržen tak, aby usnadňoval práci s webovými službami a API, a to zejména při testování a ladění. Díky jeho jednoduché syntaxi, podpoře formátování JSON a barevnému výstupu se stal oblíbeným mezi vývojáři. Na rozdíl od podobných nástrojů, jako je curl, nabízí HTTPie přehlednější a intuitivnější rozhraní.

S HTTPie můžete posílat HTTP požadavky (GET, POST, PUT atd.), přidávat vlastní hlavičky, zpracovávat odpovědi a pracovat s různými typy dat. Jeho užití je jednoduché, například pro odeslání GET požadavku na danou adresu byste použili příkaz:

bash
Copy code
http GET https://example.com
Je to skvělý nástroj pro vývojáře, kteří potřebují efektivně pracovat s API přímo z příkazového řádku​

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #9 kdy: 11. 09. 2024, 10:21:34 »
ChatGPT nezná nic.
Retrieval inforced AI, moduly pro matematické vzorečky nebo rovnice...

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #10 kdy: 11. 09. 2024, 22:13:49 »


Bylo by možné pomocí toho httpie potvrdit tlačítko na souhlas se sbíráním informací, sdílení se třetími stranami? Potřebuju tři cookies o souhlasu <code>
<div class="freeprivacypolicy-com---reset freeprivacypolicy-com---nb freeprivacypolicy-com---palette-light freeprivacypolicy-com---nb-simple freeprivacypolicy-com---lang-cs" id="freeprivacypolicy-com---nb" role="dialog" aria-modal="true" aria-labelledby="cc-nb-title" aria-describedby="cc-nb-text"><div class="cc-nb-main-container">
<div class="cc-nb-title-container">
<p class="cc-nb-title" id="cc-nb-title">Používáme soubory cookies</p>
</div>
<div class="cc-nb-text-container">
<p class="cc-nb-text" id="cc-nb-text">Tyto webové stránky používají soubory cookies a další sledovací nástroje s cílem vylepšení uživatelského prostředí, zobrazení přizpůsobeného obsahu a  reklam, analýzy návštěvnosti webových stránek a zjištění zdroje návštěvnosti.</p>
</div>
<div class="cc-nb-buttons-container">
<button class="cc-nb-okagree" role="button">Souhlasím</button>
<button class="cc-nb-reject" role="button">Odmítám</button>
<button class="cc-nb-changep" role="button">Upravit mé předvolby</button>
</div>
</div>
</div>
</code>

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #11 kdy: 11. 09. 2024, 22:18:49 »


Je tam připojený js soubor asi ajax. A myslím, že je to tak zabalený že to nerozluští ani chatGPT, sice orientačně ví o čem to je, ale nevím jak odeslat ten souhlas ... a vyzvednout a uložit ty cookies co pošle.

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #12 kdy: 11. 09. 2024, 22:27:37 »
Respektive jsem zjistil, že stránka mi procházet jde (tedy i stahovat stránky na odkazech), i když jsem v prohlížeči nepotvrdil to tlačítko se souhlasem, ale je tam přesto tato cookie:

cookie_consent_level:"%7B%22strictly-necessary%22%3Atrue%2C%22functionality%22%3Afalse%2C%22tracking%22%3Afalse%2C%22targeting%22%3Afalse%7D"

Možná by tedy stačilo jen přidat to mezi odesílané cookies, aby si server "myslel" že jsem ten js normálně načetl.

Re:Stažení souboru (curl) a převod kodování (iconv?)
« Odpověď #13 kdy: 12. 09. 2024, 08:14:44 »
To tlačítko spouští na stránce JavaScript, na to žádným stahovačem nekliknete. Pokud potřebujete odesílat nějaké cookie, to HTTPie samozřejmě umí.

Re:Stažení souboru (curl) a cookie dialog ignoruj
« Odpověď #14 kdy: 12. 09. 2024, 13:16:27 »
ChatGPT nezná nic.
Retrieval inforced AI, moduly pro matematické vzorečky nebo rovnice...
poopravení, správně je Retrieval augmented generation


Z mých zkušeností tyhle cookie dialogy naprosto ignoruj, je to prostě jen smetí, plevel, ničemu nebrání(pokud si dáš do grafického browseru i doplněk na skrytí všech CSS elementů zodpověných za cookies dialog, tak i reálně nevadí), pokud jsou na stránce takto.

něco jiného jsou vyděračské cookie dialogy,které unesou URL  na vyděračskou jednu URL ,kde jsi spoutaný jak rukojmí . Takové praktiky kromě al kajdy dělají ještě dva české hodně velké weby. To ale není tento případa, zde to je jen přidaná omáčka na stránce