«

»

BobaMikro: Post WordPress til Laconica og Twitter

Merknad: Dette innlegget er fleire år gammalt. Informasjonen kan vere utdatert og eg kan ha endra syn sidan då.

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" og http://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!)

4 innspel

Gå til innspelskjema

  1. Odin Omdal Hørthe / Velmont

    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. 🙂

  2. Kristoffer Egil Bonarjee

    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.

  3. Odin Omdal Hørthe / Velmont

    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… 🙂

  4. Simon

    Hmm, ja, dårleg formulert. Endrar no.

Innspel er deaktivert