BobaMikro: Post WordPress til Laconica og Twitter
Torsdag 23. juli 2009, klokka 21:45
For eit par veker sidan flauma det over med overlagde bosspostar her på Boba.no. Sjølv om eg klårt og tydeleg skreiv at de skulle ignorera desse innlegga, var det mange av dykk som såg dei lell. Eg hadde nemleg skrive eit lite WordPress-innstikk, og måtte testa om det fungerte som det skulle. Funksjonen til innstikket er enkelt: når eg publiserer eit innlegg, post ei mikromelding med tittelen og ein korturl til innlegget på Laconica og Twitter.
«Heh, det er jo nett det Twitterfeed gjer, er det ikkje?», spør du kanskje. Jo, det er sant, med visse modifikasjonar. Twitterfeed sjekker nyhendestraumen din, og gjer det i intervall. Dessutan er det berre visse korturl-tenester som er tilgjengeleg i Twitterfeed, og i tillegg er det så stor pågang til tider at innlegga dine ofte seinkast. Etter fyrst fem timar seinking, og neste gong 27 timar seinking, vart eg så sint at eg sletta alt eg hadde hjå dei og svor at eg aldri meir skulle nytta Twitterfeed. Eg glytta litt på eit par innstikk som allereie fanst, men ingen kombinerte Laconica, Twitter og ein eigen korturl-teneste slik eg ville. Difor skreiv eg eit eiga innstikk. Somme ville sjå korleis det var, så her kjem det.
Merk at eg slettest ikkje har den mest elegante koden, og at det truleg finst betre vis å gjera dette på. Det er dessutan mykje som står att før eg eventuelt kan offentleggjera dette (eg tenkjer menyar og innstillingar, brukarnamn og passord, osb). Korturl-tenesten eg nyttar heiter YOURLS, og er lett å taka i bruk på eigen tenar, og du treng dette for at innstikket skal fungera. Eg har nytta YOURL to WordPress, Twitter Tools og Laconica Tools som basis for dette innstikket, men du treng ikkje desse.
For å testa det ut, sjå til at du endrar det følgjande:
- Line 36:
MELDING $tittel $kort
Dette er meldinga som sendast til Laconica og Twitter. Hjå meg står det «Boba.no – $tittel $kort»: døme. - Line 50:
'BRUKARNAMN PÅ TWITTER', 'PASSORD PÅ TWITTER'
Dette bytar du sjølvsagt ut med brukarnamnet og passordet ditt - Line 53:
'http://LACONICA-TENAREN DIN', 'BRUKARNAMN PÅ LACONICA', 'PASSORD PÅ LACONICA'
Dette bytar du ut med ein Laconica-tenar, og brukarnamnet og passordet ditt der. Eg har til dømes http://kvitre.no som tenar, men du kan òg nytta http://identi.ca eller noko anna (ikkje gløym http:// eller https://, og merk at det er ikkje skal vera skråstrek på slutten). - Line 151, 152 og 154:
"BRUKARNAMN I YOURLS","PASSORD I YOURLS"oghttp://YOURLS-TENAREN DIN/
Brukarnamn, passord og tenaren til YOURLS.
Eg ser for meg at dette vil vera kjekt å arbeida vidare med:
- Lat brukarane få velja om dei vil nytta YOURL eller ikkje.
- Legg til støtte for TightURL og andre korturltenester.
- Lat brukarane få velja om dei vil berre senda til Laconica eller berre til Twitter.
- Legg til status i metainfoen til innlegget, slik at innlegg som ikkje kunne postast til mikrobloggane (t.d. viss Twitter-kvalen er ute og bles bort innkommande innlegg) vil kunne postast seinare.
- Legg til val på innleggsnivå om å ikkje posta innlegget til mikrobloggane.
- Sikkert underforstått frå over, men eg tek det med lell: Lag ei side med innstillingar, lagra innstillingane i databasen i staden for hardkoda i kjelden.
Eg trur koden skal vera ganske enkel å forstå, og eg meiner at eg har kommentert koden tilstrekkeleg. Eg veit derimot at eg er dårleg på sånt, så berre spør viss det er noko som er uklårt. No skal eg ikkje plaga dykk meir, her er koden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | <?php /* Plugin Name: BobaMikro Description: Lagar korturlar av nye innlegg og sender dei til Laconica og Twitter. Nyttar YOURLS til korturlar: http://code.google.com/p/yourls/downloads/list Author: Simon Hansen Author URI: http://boba.no/ Version: 0.1 */ add_action('wp_head', 'bobamikro_hovudtagg'); // legg til i vevhovudet add_action('new_to_publish', 'bobamikro_nypost'); // køyr når du publiserer nytt innlegg add_action('draft_to_publish', 'bobamikro_nypost'); // køyr når du publiserer ein kladd add_action('pending_to_publish', 'bobamikro_nypost'); // køyr når du publiserer eit ventande innlegg add_action('future_to_publish', 'bobamikro_nypost'); // køyr når du publiserer eit planlagt innlegg /** * Denne funksjonen utførast når noko vert publisert. Funksjonen finn tittel * og url, og lagar ny korturl (eller hentar ein eksisterande) frå YOURLS. * Det sjekker så om innlegget har det eigenlaga feltet "bobamikro_posta". * Viss ikkje, sender den inn mikroinnlegget og legg til feltet i innlegget. * @param post Dette er innlegget. Vert lagt til automatisk av WordPress */ function bobamikro_nypost( $post ) { $post_id = $post->ID; // ID til innlegget if($post->post_type!= 'post'){ // viss dette ikkje er eit innlegg return; // avslutt } $tittel = get_the_title($post_id); // Finn tittelen på innlegget $url = get_permalink ($post_id); // Finn lenkja til innlegget $kort = bobamikro_korturl_ny( $url, $post_id ); // Lag ny (eller finn gammal) korturl if ( !get_post_custom_values( 'bobamikro_posta', $post_id ) ) { // viss innlegget ikkje har feltet bobamikro_posta $kvitt = "MELDING $tittel $kort"; // lag mikroinnlegget if ( bobamikro_send_kvitt( $kvitt ) ){ // Send mikroinnlegget. Viss det vart sendt add_post_meta($post_id, 'bobamikro_posta', 1); // Legg til feltet bobamikro_posta } } } /** * Denne funksjonen tek i mot mikroinnlegget og sender det, brukarnamn, * passord og tenar til Laconica og Twitter. Viss Laconica, Twitter eller båe * vart publisert, returnerer funksjonen den boolske verdien TRUE * @param kvitt Dette er mikroinnlegget. */ function bobamikro_send_kvitt( $kvitt ) { if(bobamikro_twitter('BRUKARNAMN PÅ TWITTER', 'PASSORD PÅ TWITTER', $kvitt)){ // Viss innlegget vart publisert på Twitter $twitter=TRUE; // Set variabelen twitter til TRUE } if(bobamikro_laconica('http://LACONICA-TENAREN DIN', 'BRUKARNAMN PÅ LACONICA', 'PASSORD PÅ LACONICA', $kvitt)){ // Viss innlegget var publisert på Laconica $laconica=TRUE; // Set variabelen laconica til TRUE } if( ($twitter && $laconica) || ($twitter || $laconica) ){ // Viss variablane laconica, twitter eller båe er TRUE return TRUE; // returner TRUE }else{ // viss korkje laconica eller twitter er TRUE return FALSE; // returner FALSE } } /** * Denne funksjonen gjer freistnad på å senda mikroinnlegg til Twitter, * og returnerer TRUE eller FALSE alt etter som. * @param brukar Brukarnamnet på Twitter * @param pass Passordet på Twitter * @param melding Mikroinnlegget som skal publiserast */ function bobamikro_twitter($brukar, $pass, $melding){ $tenar = "http://twitter.com/statuses/update.xml?status=".urlencode(stripslashes(urldecode($melding))); // API-en til Twitter $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $tenar); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERPWD, "$brukar:$pass"); // brukarnamn og passord curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_POST, 1); $resultat = curl_exec($ch); $resultatTabell = curl_getinfo($ch); curl_close($ch); return ($resultatTabell['http_code'] == "200"); } /** * Denne funksjonen gjer freistnad på å senda mikroinnlegg til Laconica, * og returnerer TRUE eller FALSE alt etter som. * @param tenar Laconica-tenaren * @param brukar Brukarnamnet på Laconica-tenaren * @param pass Passordet på Laconica-tenaren * @param melding Mikroinnlegget som skal publiserast */ function bobamikro_laconica($tenar, $brukar, $pass, $melding){ $tenar = $tenar.'/api/statuses/update.xml'; // API-en til Laconica $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $tenar); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERPWD, "$brukar:$pass"); // brukarnamn og passord curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_POSTFIELDS, 'status='. $melding); $resultat = curl_exec($ch); $resultatTabell = curl_getinfo($ch); curl_close($ch); return ($resultatTabell['http_code'] == "200"); } /** * Denne funksjonen pentar ut ein link-tag i <head> med korturl til innlegget * viss dette finst. Funksjonen tek ingen parameter. Les kvifor link-taggen * er kjekk på t.d. http://shorturl.appjet.net/ og http://revcanonical.appspot.com/ */ function bobamikro_hovudtagg() { global $post; $id = $post->ID; // ID til innlegget $kort = bobamikro_korturl_hent($id); // Hent korturl if ($kort){ // viss korturl finst echo "\n\t<link rel=\"alternate short shorter shorturl shortlink\" href=\"$kort\" />\n"; // prent ut link-tagg } } /** * Denne funksjonen finn fram korturl viss denne er lagra i det eigenlaga * feltet bobamikro_korturl. * @param id ID-en til innlegget */ function bobamikro_korturl_hent($id) { $kort = get_post_meta( $id, 'bobamikro_korturl', true ); // Hent streng med innhaldet i det eigenlaga feltet bobamikro_korturl (tom streng viss dette ikkje finst) return $kort; // returner strengen } /** * Denne funksjonen freister å laga ny korturl til eit innlegg, og leggja til * eit eigenlaga felt med denne i. Den returnerer ein streng med korturlen. * @param url URL-en som skal kortast ned. * @param post_id ID på innlegget. Viss dette ikkje finst, er parameteren sett til 0. */ function bobamikro_korturl_ny( $url, $post_id = 0 ) { $korturl = bobamikro_korturl_api($url); // lagar korturl gjennom korturl-API-en if ($post_id && $korturl){ // viss innleggsID og korturl finst add_post_meta($post_id, 'bobamikro_korturl', $korturl); // legg til eigenlaga felt i innlegget } return $korturl; // returner korturl } /** * Denne funksjonen sender ein URL til YOURLS-apien og får attende ein korturl. * Viss URL-en er korta ned før, får du den eksisterande korturlen attende, * viss ikkje vert ein ny korturl oppretta. * @param url URL-en som skal kortast ned */ function bobamikro_korturl_api($url){ $brukar="BRUKARNAMN I YOURLS"; // brukarnamn i YOURLS $pass="PASSORD I YOURLS"; // passord i YOURLS $url=urlencode($url); $api="http://YOURLS-TENAREN DIN/yourls-api.php?username=$brukar&password=$pass&action=shorturl&url=$url&format=json"; // API-en til YOURLS $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $api); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $json = curl_exec($ch); curl_close($ch); $resultat = json_decode($json, TRUE); return $resultat["shorturl"]; // korturlen } ?> |
Andsvarsfråskriving: eg er ikkje andsvarleg viss noko går gale viss du prøver dette. Er du ikkje samd i dette, lyt du heller ikkje testa ut koden. (Ikkje at eg trur det er noko som går gale, men no kan du i alle fall ikkje skulda på meg, ha-ha!)


Flott! Eg skal få hacka det til slik at eg sjølv kann bruka det. Skal prøva gjera det slik at innstikket vert betre og at du skal kunna taka inn endringane. :-)
Kult at du hev frigjort det. Eg hev nokre ting eg vil prøva ut sjølv når eg får tid. Du får leggja det ut på wordpress.org når du hev glatta ut kantane.
Eg hev det på netsida mi no. Ein del endringar på det, men dei er ikkje reine nok. Dessutan er det fleire ting eg vil fiksa på. Forresten litt keisamt å krevja CURL, menmen…
Forresten trudde eg me trong Laconica Tools, Twitter Tools og alle dei andre du nemnde for at det skulle køyra. Heldigvis trong me ikkje det… :)
Hmm, ja, dårleg formulert. Endrar no.