• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    NYXnyx :: API
    NYX
    NYX --- ---
    Takže už je to venku, proč se to API bude měnit, tak nějaké detaily.

    Nový Nyx je napsaný tak, že je extrémně snadné vyklopit do JSONu data, která by normálně šla do šablony, tj. endpointy poměrně věrně zrcadlí jednotlivé stránky Nyxu samotného. Přijde mi to pro účely Nyxu smysluplnější než nějaké "skutečně" REST/GraphQL api. Slušná část endpointů je dostupná čistě přidáním /api na začátek cesty, tj. z /mail se udělá /api/json a hurá, JSON. Jen někde dávalo smysl udělat nějaký custom, který akceptuje parametry v nějaké smysluplnější podobě.

    Úpravy ze starého API by měly být poměrně snadné, změnit endpointy + parametry a popasovat se s novou strukturou toho, co přijde zpět + drobné změny v tom, jak chodí zpět textový obsah (trochu jinak chodí obrázky apod.).

    Chtěl jsem mít k dispozici rovnou i automaticky generovanou OpenAPI dokumentaci pro Swagger a spol., ale je teď nějaká nekonzistence mezi frameworkem a generátorem a nepodařilo se mi to zatím zprovoznit, tak snad časem :-/

    Velka cast API tam funguje uz ted, takze zacnu nejak dokumentovat rucne. Brzo dam na nastenku nejaky dokument, zatim tam dam aspon popis jak se prihlasit :-)
    LUCIEN
    LUCIEN --- ---
    LUCIEN: Pardon. Vrací, ale nechtěl jsem to používat protože to u některých klubů vrací poměrně velký HTML. Ale asi lepší než to cachovat u sebe.
    LUCIEN
    LUCIEN --- ---
    To jsem si myslel :/ Cachovat to muzu, ale je to takove volake... budu s tim mit vic problemu nez uzitku. Prekvapilo me, ze ten endpoint pro vraceni nastenky nevraci i zakladni info o klubu...
    NYX
    NYX --- ---
    NYX: Teoreticky si muzes cachovat nazvy diskuzi u sebe. Ale nebude to 100%
    NYX
    NYX --- ---
    LUCIEN: Nic me ted nenapada :-/
    LUCIEN
    LUCIEN --- ---
    Pokud bych si chtel vytahnout informace o nejakem klubu (podle ID a de facto me zajima jen jeho nazev), ale zaroven neprijit o neprectene v tom klubu - jak na to nejlepe v aktualni api?
    NYX
    NYX --- ---
    VIRTUALVOID: Jsou to oddelene reauesty, tj. nejdriv nahravas soubor, ohandlujes error a teprve pak resis prispevek. Cekani na upload je problem appky.
    VIRTUALVOID
    VIRTUALVOID --- ---
    NYX: vies tam zabezpecit transakciu ? t.j. ak sa neuploadne subor, nebude existovat ani prispevok ?
    NYX
    NYX --- ---
    LUCIEN: Ano. Respektive jinak, upload souboru pojede separatne od poslani prispevku.

    Soubory se nahraji do lokace (posta, diskuze) a nasledujici prispevek je k sobe pripoji. Api samozrejme bude posilat seznam cekajicich souboru v dane lokaci.
    LUCIEN
    LUCIEN --- ---
    Nyxi, planujes v nove api moznost nahrani vice obrazku (souboru) najednou? Just curious...
    LUCIEN
    LUCIEN --- ---
    NYX: je to takovy zvlastni chovani kdyz ma clovek v premiovce zapnuty neanonymni minusky - uz par lidi mi to reportovalo jako bug, ale asi whatever...
    NYX
    NYX --- ---
    LUCIEN: Jo, na palce dolu uzivatele iniciativne neupozornujeme :-)
    LUCIEN
    LUCIEN --- ---
    api > feed / notices dle meho spatne vraci (resp. nevraci vubec) info o thumbs_down pokud to mam v premiovce zapnute.
    LUCIEN
    LUCIEN --- ---
    NYX:

    1. Zakladni info - ID, posledni prihlaseni, reference, pozvani lide (jen cislo?), pozval ho
    2. Nastenka
    3. Pratele / Komentare
    4. Diskuze
    5. Statusy
    NYX
    NYX --- ---
    LUCIEN: a jake presne informace jsou ty zasadni?
    LUCIEN
    LUCIEN --- ---
    Chapu, ze API bude nejak prochazet vyvojem, ale neslo by do te stare api pridat detail uzivatele? Aspon jen par fieldu z DB, at nemusim ve Fyxu odkazovat na web, ktery vzdy zobrazi login stranku... Je to takovy endpoint, ktery moc nechapu proch chybi...
    LUCIEN
    LUCIEN --- ---
    Vzhledem k Apple guidelines by se docela hodila API pro praci s ignorem a nahlasovanim prispevku moderatorum... Zatim to budu muset obchazet nejakym vlastnim resenim v appce.
    RAINBOF
    RAINBOF --- ---
    AZER: mrkni do conyx ten je v pythonu
    AZER
    AZER --- ---
    LUCIEN: Nakonec jsem si poradil s pomocí tvých příkladů tady ve vlákně...
    AZER
    AZER --- ---
    LUCIEN: Ano, to jsem čekal. V tabulce nevidím URL api nebo třeba autentifikaci...
    LUCIEN
    LUCIEN --- ---
    AZER: Díval jsi se do záhlaví?!
    AZER
    AZER --- ---
    Ahoj. Nyx používám momentálně skoro denně a rád bych si napsal skript na vkládání příspěvků do diskuze přes API. Je API, ať už jakkoli jednoduše, někde zdokumentováno?
    NYX
    NYX --- ---
    A tim, ze jsem neco mazal, bude ta content-length urcite blbe :)
    NYX
    NYX --- ---
    GIOMIKY: Pres dev tools jsem zmanipulovat firefox aby poslal dotaz na api (api akceptuje i id_user / session cookies, proto tam nemam ty auth veci) a tohle funguje (par veci jsem teda vyhodil, ale v principu by tohle melo byt ok):

    Jinak pro jistotu zkus vzdy poslat neco v message, nejsem si jisty, jestli to api nepozaduje...ale myslim, ze tohle jsem opravoval.

    POST /api.php HTTP/1.1
    Host: www.nyx.cz
    User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate, br
    Referer: https://www.nyx.cz/
    Content-Type: multipart/form-data; boundary=---------------------------2947931362286975723942639516
    Content-Length: 2353
    Origin: https://www.nyx.cz
    DNT: 1
    Connection: keep-alive
    Cookie: cookie_consent=1; last_port_add=455; ssl=1; id_user=1; session=XXX
    Upgrade-Insecure-Requests: 1
    Sec-Fetch-Dest: document
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: same-origin
    Sec-Fetch-User: ?1

    A body pak je:

    -----------------------------2947931362286975723942639516
    Content-Disposition: form-data; name="id"

    22326
    -----------------------------2947931362286975723942639516
    Content-Disposition: form-data; name="message"

    test
    -----------------------------2947931362286975723942639516
    Content-Disposition: form-data; name="attachment"; filename="test.txt"
    Content-Type: text/plain

    Oh, hi!
    -----------------------------2947931362286975723942639516
    Content-Disposition: form-data; name="l"

    discussion
    -----------------------------2947931362286975723942639516
    Content-Disposition: form-data; name="l2"

    send
    -----------------------------2947931362286975723942639516--
    NYX
    NYX --- ---
    GIOMIKY: Jakykoliv soubor. Mas moznost vypsat cely ten odchazejici request? Kdyztak posli. Bez auth udaju samozrejme :-)
    NYX
    NYX --- ---
    GIOMIKY: Nejsem pythonista, ale ciste kdyz na to koukam, tak ty postupujes presne naopak...udelas nejaky multipart a ten strcis jako jeden z parametru.

    Spravne ty naopak mas udelat multipart body a do nej nastrkat jak parametry, tak soubory.

    content-disposition je pak vlastnost konkretniho kusu toho multipartu, ne requestu jako celku.

    Nevim jakou verzi urllib tam mas, tady je priklad pro dvojku. https://pymotw.com/2/urllib2/#uploading-files
    NYX
    NYX --- ---
    LUCIEN: Ja mam podezreni, ze ten tag ti zavre prohlizec, v html ti nejspis chodi to cos posilal jako prvni.
    LUCIEN
    LUCIEN --- ---
    LUCIEN: Pardon, ono to ten prvni odkaz uzavre, takze je prazdny, takhle...
    
    <a href="http://google.com"></a> <a href="http://i.mg/t.jpg"><img src="http://nyx.cz/...../thumb.jpg"></a>
    LUCIEN
    LUCIEN --- ---
    NYX: Vidim v tom trochu problem... Pokud uzivatel odesle napr.:

    
    <a href="http://google.com"><img src="http://i.mg/t.jpg"></a>
    


    tak to api vrati takhle

    
    <a href="http://google.com"><a href="http://i.mg/t.jpg"><img src="http://nyx.cz/...../thumb.jpg"></a></a>
    


    ...
    NYX
    NYX --- ---
    LUCIEN: Api posila zmensene obrazky s odkazem na original
    Kliknutím sem můžete změnit nastavení reklam