Mitt første WordPress-instikk (plugin for Bloggrevyen/arkivet)

Det dreier seg om automatisk pinging av Bloggarkivet og Bloggrevyen. Det har vært et savn i WordPress, som ellers er så bra. Først gjorde jeg et «hack», og det virket. Siden kom jeg på bedre tanker.

Denne plugin pinger Bloggarkivet og/eller Bloggrevyen med riktig «trackback» ettersom man setter den opp, basert på definerte kategorier. Dermed kan man treffe Bloggrevyens tematiske kategorier riktig og få riktig (eller varierende) språk-kategori på Bloggarkivet.

Jeg trenger noen som kan teste programvaren. Den er akkurat ferdig og kanskje meget buggy, kanskje virker den ikke for deg. Alle tilbakemeldinger mottas med takk.

Den kan lastes ned herfra.

Det er tre filer. De to html-filene er kopi av «html source» fra Bloggarkivet og Bloggrevyen, og innstikket bruker disse til å finne riktige URL-er og kategorier. Alle filene legges foreløpig i plugin-mappen. Korrigert: Alle filene legges nå i plugins/tb-arkivet-revyen.

Skrevet av

Knut Sparhell

IT-ingeniør, Nytt Nettsted

16 thoughts on “Mitt første WordPress-instikk (plugin for Bloggrevyen/arkivet)”

  1. Nå får jeg ikke testet det etter som jeg har forlatt WP, men hva gjøres dersom en eller flere av tjenestene endrer struktur i forhold til de vedlagte «html sourcene»? Må da hele tillegget oppdateres?

    Vil det ikke være mer naturlig å laste ned en «ren kategoriliste» fra tjenestene «as is» så de kontinuerlig er oppdatert? Bloggarkivet har allerede en slik (dog mindre kjent) liggende og jeg deler URLen mer enn gjerne dersom det kan gjøre tillegget enklere å håndtere.

  2. Takk for innspill.

    Jeg har lagt ved en statisk fil. Det skiller seg ikke ut fra å bruke php «define» på annen måte enn at kildefilen ikke er en .php-fil. Og den hentes ikke med http, men det er kanskje det du mener den burde?

    Dermed har vi så langt en fin mellomting mellom helt hardkodet og helt dynamisk.

    Hvis Bloggrevyen endrer forholdet mellom kategorier og URL-er så må man eller jeg laste ned ned på nytt og helst utgi en oppdatering. «Man» kan evntuelt legge den inn selv, eller gjøre det som en oppdatering av den xpath-query som brukes.

    Om Bloggrevyen bare endrer layout, html-elementer og deres «class» spiller da ingen rolle inntil videre, i alle fall ikke før jeg da kan gjøre en eventuell oppdatering på den tid som passer. Kommer en ekstra kategori eller et nyt språk så kan jeg fikse det på minutter, eller brukeren kan altså klare biffen selv.

    Helkontinuerlig oppdatering via http har også sin ulemper, da det bør skje asynkront for ikke å henge op WordPress med en ressurs som er treg.

    Her har du både i pose og sekk! Dette nettopp fordi en konfigurasjonsfil er identisk med websiden deres. Så lenge disse tjenestene i all hovedsak fungere som nå så vil dette virke. Min bekymringer går på helt andre ting.

    Ja, man kunne generalisere fullstendig, men da blir også noe av poenget borte. Det skal være tut og kjør for de mange WordPress-brukerne i Norge, og kanskje i Skandinavia ellers, har jeg kanskje tenkt. Jeg bryr meg i grunn bare om Bloggrevyen og Bloggarkivet, i alle fall foreløpig.

    Hvis en «ren kategoriliste» finnes så kan jeg klart bruke den, men faktisk ser jeg ike noe poeng i det. Den fila jeg bruker internt er så «ren» som den trenger, allerede. Lesbar for maskin og menneske.

  3. Ser lovende ut, skal forsøke å få testet i morgen, og gi tilbakemelding. Men – p.s – hva er det med alle feilmeldingene nedenfor:

    «Warning: mysql_affected_rows() [function.mysql-affected-rows]: A link to the server could not be established in C:\Data\Websites\Sparhell\WebHtml\knut\blogg\wp-includes\wp-db.php on line 161»

  4. De feilmeldingene nedenfor skyldes en test/alfaversjon av en annen plugin jeg har. Jeg kan også skru av «warning» i PHP, men jeg regner med at forfatteren av den dårlige plugin snart ser på saken. Enn spå lenge så synes jeg den gjør mer nytte enn skade.

    Min plugin bruker ikke oppdatering av database med SQL «UPDATE». Kun update_option fra WordPress API. De var der dessuten lenge før jeg startet med min plugin. Ikke bekymre… 🙂

  5. Det jeg mener er hva som vil skje dersom filstrukturen endres og det svarer du jo på.

    Du skriver også at det skal være «tut og kjør» og det blir det jo ikke dersom «brukeren» må laste opp nye filer «nå og da». Nå sier jeg ikke at hverken Bloggarkivet eller Bloggrevyen kommer til å endre trackback-URLene sine, men det _kan_ jo være det blir gjort og da må altså brukeren «flikke» for å få det til.

    Slik jeg ser det ville en request til en «gitt url» være mer naturlig. Den kan gjøres lynrask ved å sjekke når filen ble endret sist og ignorere den hvis «den er lik» siste oppdatering. En slik request behøver man vel strengt tatt ikke gjøre flere ganger heller, men kun dersom trackbacken feiler, og da selvfølgelig første gang man bruker tillegget.

    Jeg ser for meg en løsning som …

    1. «Installeres» og aktiveres i WP
    2. Laster ned en liste over URLer første gang den brukes (og en slik liste vil jeg tro bloggrevyen også vil kunne legge ut)
    3. Laster ned en oppdatert liste dersom, og _kun_ dersom trackbacken feiler for å se om den er endret.

    En slik løsning bør være transparent for brukeren, og jeg vil tro dette er den eneste «lure» måten å gjøre det på for å forsikre seg om at URLen er gyldig til enhver tid.

    Om en slik tjeneste laster ned en HTML-fil eller et XML-dokument spiller vel strengt tatt ingen rolle, men det vil jo være (dersom man måler i mikrosekunder) raskere å laste ned et dokument på 20k enn et på 200k.

    Jeg ser også at det ikke skal mer til enn å endre klassenavnet relatert til CSS for å «knote til» tillegget og det er en av de tingene jeg tenker på når det gjelder endring av strukturen. HTMLen på en hvilken som helst side kan ikke sees på som «endelig» blant annet på grunn av slike småting.

    En «gitt standardstruktur» vil kunne være endelig og alltid tilgjengelig i «formatet» man ønsker. Eksempelvis er «kategori/språkliste» -strukturen til Bloggarkivet (noe forkortet) slik som dette.

    <languages>
    <longname>Norsk</longname>
    <shortname>NO</shortname>
    <trackbackurl>http://foo.bar/catlang/no/</trackbackurl&gt;
    <longname>Svensk</longname>
    <shortname>SE</shortname>
    <trackbackurl>http://foo.bar/catlang/se/</trackbackurl&gt;
    </languages>

    Den er også tilgjengelig som ren XML og bør være enklere å forholde seg til enn en «tilfeldig» stilarks-klasse eller «url» i et HTML-dokument.

    Men dette er kun mine tanker om saken for å gjøre tillegget så transparent som mulig for sluttbrukeren. Det er ikke en gang sikkert det jeg skriver her utelukkende er fordelaktig.

  6. Kyrre: Meget konstruktivt. Jeg har straks adoptert til forslag til struktur av en slik fil. Så får vi se om det kommer noe slikt fra revyen/arkivet.

    Siden det ikke finnes noen standarder å holde seg til på dette området, så blir alle måter å gjøre dette på muligens ikke kompatibelt med fremtiden. Jeg har laget noe som muligens virker nå, så får jeg heller komme med oppdateringer.

    Men jeg har alt forsøkt gjøre det bedre ved å inkludere en konfigurasjonsfil. Den vil da styre om kategorier og språk skal leses som html eller xml, hvilke filer som skal brukes og senere også hvor URL til språk og/eller kategoridefinisjoner kan hentes med http.

    http://sparhell.no/knut/blogg/wp-content/plugins/tb-arkivet-revyen/config.xml
    http://sparhell.no/knut/blogg/wp-content/plugins/tb-arkivet-revyen/bloggarkivet.xml

    Begge filene, og de tidligere html-filene er med in pakken. Anbefaler nå å legge dem i en egen mappe.

    Også fikset en mulig tabbe med backslash i lokale filbaner. Slash virker på alle platformer, skulle jeg tro. Her er en Windows-server.

  7. Da har jeg implementert opsjon (i koden foreløpig) for å hente språk og kategorier online. Sistnevnte er litt tregere, så det er avslått i utgangpunktet. Siden kan jeg lage en admnistrativ funksjon som oppdaterer lokal fil derfra.

    Red: Du er vel mest opptatt av Bloggarkivet. Mulig du blir skuffet, siden det er ikke er stort annet enn ab av/på-funksjon per kategori. Og språkvalg generelt, noe som mangler for Bloggrevyen. Kanskje bør en senere versjon ha språkvalg per kategori, for de flerspråklige bloggene? Det kan også virke noe omstendelig.

    Versjon 0.7 er da lagt ut.

  8. Neida. Jeg er ikke hverken mest opptatt av Bloggarkivet eller skuffet. Jeg mest opptatt av at «bloggerne» får «mest for pengene» hos _alle_ tjenester, og jeg er ikke sikker på om jeg skjønner _hva_ jeg skulle bli skuffet over.

  9. Godt. Det var vel bare en strøtanke ut fra at det er funksjonaliteten rundt Bloggrevyen som har mest oppmerksomhet i dette programsnutten, i og med kategorifordelingen, og «Bloggarkivet er nå [..] driftet av Kyrre Baker».

    Men jeg vet egentlig at du er opptatt av at bloggerene blir mest mulig betjent. Kan egentlig bare beklage at den strøtanken kom på trykk.

    Det at én har et problem han vil løse, men så kan og vil dele løsningen med andre, er jo det beste i denne verdenen. Det at egenytte under riktige betingelser bir alles beste synes jeg det globale programdelingsmiljøet på nettet er et god bevis på. Tema for et lett filosofisk blogginnlegg – en dag.

    Til saken: Testing hos en annen blogger i næheten (her på serveren) kan tyde på at WordPress noen ganger respekteter at det ikke skal sendes ping/trackback flere ganger fra samme innlegg. Hvis man har oppført Bloggarkivets URL i den globale ping-listen, så sendes den først, og trackback fra denne plugin utelates. I ande tilfeller er listen over sendte trackbacks full av duplikater (en bug). Jeg må skrive noe om å fjerne Bloggarkivet/Bloggrevyen fra den globale ping-listen (Innstillinger -> Skriving).

    (Som du skjønner har jeg norsk språkfil til WordPress og husker knapt hva ting heter på engelsk).

  10. Hvis jeg skjønner deg rett er problemet at WP ikke alltid vet om det er- eller skal sendes trackback til en side? I så tilfelle kan dette «noe» enkle hacket være noe? [1].

    [1] http://kyrres.net/2005/05/25/autotrackback/

    Nå skal du ikke se bort fra at jeg tolker deg feil men da får jeg bare beklage at jeg ikke klarer å følge med. Jeg kunne nok prøvd å forsvare det med at klokken snart er 04:40, men det blir bare dumt 🙂

  11. Ang. ditt «hack»: Har ikke peiling. Mye er nytt i WordPress 2.0. «my-hacks.php» støttes ikke uten at dette spesifiseres spesielt (deprecated). Jeg vil si at problemet er feil type «ping». Andre tjenester bruker XML-RPC og en ping-metode (XML). Bloggarkivet og Bloggrevyen tar bare imot http post med bestemte parametre lik dem som brukes ved «trackback», såvidt jeg kan erfare (som når man poster en på egen blogg som også er en til et annet blogginnlegg). WordPress støtter slike trackbacks fre hvert enkelt innlegg når det er spesifisert en TB-URL pr innlegg. Derfor bruker jeg også WordPress’ egen rutine ved å kalle den opp, uansett om det er angitt som metainformasjon til innlegget, altså som global innstilling.

    En kodefeil (bug) kan ha ført til at ping til Bloggarkivet ikke blir sendt i noen tilfeller. Og en rekke generaliseringer ang. oppsettet er gjort, samt koderydding og kommentering. Config er nå fullstendig med alle alternativer (html/xml lokal fil/href). Lokal xml er default for begge.

    Ny versjon 0.8 lagt ut. Fortsatt må vi regne dette som helt beta. Om det snart kommer et slags ok fra en Linux/Apache-bruker så kaller jeg den snart 1.0 (release).

    http://sparhell.no/knut/blogg/wp-content/plugins/tb-arkivet-revyen.zip

Det er stengt for kommentarer.