Hej, i den här handledningen uppdaterar vi vår Twitter-status via "Twitter API" med CodeIgniter. Jag rekommenderar att du följer steg för steg, istället för att glätta över handledningen. Låt oss gräva in!
Först måste vi ändra vissa standardinställningar inom CI-konfigurationsdelen.
Öppna system / application / config / autoload.php och redigera följande från:
$ autoload ['libraries'] = array (");
till:
$ autoload ['libraries'] = array ('databas');
Detta kommer att autoload databasen. Nästa, öppna database.php och redigera inställningen för databasanslutning - namnet på
din databas, användarnamn och lösenord. Som namn kommer vi att använda ci_twitter_api.
Nu öppen config.php och ändra base_url till din CI-mapp. Min mapp heter twitter_api.
I den mappen är min systemet mapp. Så min base_url kommer att vara:
$ config ['base_url'] = "http: // localhost / ci / twitter_api";
Eftersom vi ska arbeta med en databas behöver vi lite data att spela med. Öppna phpmyadmin eller din
favoritdatabashanteringsverktyg och skapa en ny databas som heter ci_twitter_api. Nu ska vi sätta upp en
nytt bord med följande SQL-fråga, men uppmärksamhet, använd ditt twitter användarnamn och lösenordsuppgifter.
SKAP TABELL OM INTE EXISTERA 'konton' ('id' int (11) INTE NULL AUTO_INCREMENT, 'användarnamn' varchar (120) INTE NULL, "lösenord" varchar (32) INTE NULL, "aktiv" int (11) INTE NULL, "last_message" varchar (140) INTE NULL, PRIMÄR NYCKEL ('id')) MOTOR = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 3; INSERT INTO 'konton' ('id', 'användarnamn', 'lösenord', 'aktivt', 'sista_meddelande') värden (1, 'DITT ANVÄNDARNAMN','DITT LÖSENORD', 1,' Inget meddelande skickat. ');
Klicka på ok knappen på höger sida och frågan ska behandlas. Nu är din struktur för bordet
konton ska likna bilden nedan.
Gå till system / applikation / modeller och skapa en ny fil som heter twitter_model.php.
Först ska vi deklarera två globala variabler överst.
var $ accounts_table = 'konton'; var $ update_url = 'http://twitter.com/statuses/update.xml';
Så $ accounts_table hänvisar till tabellen vi skapade strax före och $ update_url är den URL vi ska använda
för att uppdatera vår status. Om Twitter ändrar sin uppdateringsadress behöver du bara redigera den en gång här istället för varje gång den används i koden.
Nu kommer vi att skapa vår första metod som helt enkelt kommer att returnera det aktiva användarkonto som lagras i databasen,
baserat på raden aktiva och värde 1. Jag har lagt till det här eftersom vissa människor har två eller flera Twitter
konton.
klass Twitter_model utökar modell // få aktivt twitter konto från databasen, efter rad aktiv = 1 funktion getActiveAccount () return $ this-> db-> get_where ($ this-> accounts_table, array ('active' => ' 1' )) -> rad ();
Vi använder helt enkelt aktiva poster
för att hämta det aktiva kontot och returnera den drabbade raden.
Nästa steg ska vi bygga huvudmetoden, den uppdatering metod. Detta kommer att använda vår
användarnamn, lösenord och naturligtvis det meddelande vi vill skicka och uppdatera vår status på Twitter. Förutom det,
det kommer att tolka HTTP_CODE som returneras av Twitter för att berätta om statusen uppdaterades
framgångsrikt eller inte.
// uppdatera twitter status och senaste meddelande om framgångsfunktion update_status ($ användarnamn, $ lösenord, $ meddelande) $ ch = curl_init ($ this-> update_url); curl_setopt ($ ch, CURLOPT_POST, 1); curl_setopt ($ ch, CURLOPT_POSTFIELDS, "status =". urlencode ($ message)); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_USERPWD, $ användarnamn. ':'. $ lösenord); curl_exec ($ ch); $ httpcode = curl_getinfo ($ ch, CURLINFO_HTTP_CODE); // Om vi var framgångsrika behöver vi uppdatera vår senaste_meddelande om ($ httpcode == '200') $ this-> db-> where ('active', '1'); $ this-> db-> update ($ this-> accounts_table, array ('last_message' => $ meddelande)); returnera TRUE; annars returnera FALSE;
Vid första uppfattning kan koden ovan vara lite komplicerad men det är inte så svårt att förstå. Den viktigaste delen är
att vi använder cURL för att kommunicera med Twitter. Det är en riktigt bra
bibliotek som tillåter oss att skicka och ta emotHTTP POST data från Twitter.
Nu då curl_init initierar en cURL-session och tar URL-adressen som en parameter - i vårt fall statusuppdateringen
URL från Twitter API.
Med curl_setopt Vi ställde några nödvändiga alternativ för cURL-överföringen.
curl_exec ($ ch); $ httpcode = curl_getinfo ($ ch, CURLINFO_HTTP_CODE); // Om vi var framgångsrika behöver vi uppdatera vår senaste_meddelande om ($ httpcode == '200') $ this-> db-> where ('active', '1'); $ this-> db-> update ($ this-> accounts_table, array ('last_message' => $ meddelande)); returnera TRUE; annars returnera FALSE;
I denna del genomför vi överföringen med curl_exec () och hämta den återvände HTTP_CODE
använder sig av curl_getinfo (CURLINFO_HTTP_CODE). Detta HTTP_CODE berättar om statusuppdateringen är klar eller inte.
Koden '200' betyder att den fungerade och uppdateringen gjordes. Du kan se en komplett lista över HTTP-statuskoder
här.
Om vi får "200" returnerad av Twitter skickar vi en fråga till vår databas som uppdaterar vår senaste_meddelande rad och slutligen
vi återvänder SANN. Om 200 inte returneras, returnerar vi helt enkelt FALSK.
För att avsluta vår twitter_model Vi kommer att skapa en sista metod som kommer att få senaste meddelandet vi skickade. Vi behöver
den här metoden eftersom vi kommer att visa vårt senaste meddelande i en vy.
// få sista_meddelandet, efter rad aktiv = 1 funktion getLastMessage () $ this-> db-> select ('last_message'); $ last_message = $ this-> db-> get_where ($ this-> accounts_table, array ('active' => '1')) -> rad () -> sista_meddelande; returnera htmlspecialchars ($ last_message);
Denna metod är ganska enkel. Den väljer den senaste meddelandet rad från vårt aktiva konto och returnerar det
konverteras med htmlspecialchars till HTML-enheter.
Vår twitter_model.php ser nu ut så här:
klass Twitter_model utökar modell var $ accounts_table = 'accounts'; var $ update_url = 'http://twitter.com/statuses/update.xml'; // få det aktiva twitter-kontot från databasen, efter rad aktiv = 1 funktion getActiveAccount () return $ this-> db-> get_where ($ this-> accounts_table, array ('active' => '1')) > rad (); // uppdatera twitter status och senaste meddelande om framgångsfunktion update_status ($ användarnamn, $ lösenord, $ meddelande) $ ch = curl_init ($ this-> update_url); curl_setopt ($ ch, CURLOPT_POST, 1); curl_setopt ($ ch, CURLOPT_POSTFIELDS, "status =". urlencode ($ message)); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_USERPWD, $ användarnamn. ':'. $ lösenord); curl_exec ($ ch); $ httpcode = curl_getinfo ($ ch, CURLINFO_HTTP_CODE); // Om vi var framgångsrika behöver vi uppdatera vår senaste_meddelande om ($ httpcode == '200') $ this-> db-> where ('active', '1'); $ this-> db-> update ($ this-> accounts_table, array ('last_message' => $ meddelande)); returnera TRUE; annars returnera FALSE; // få sista_meddelandet, efter rad aktiv = 1 funktion getLastMessage () $ this-> db-> select ('last_message'); $ last_message = $ this-> db-> get_where ($ this-> accounts_table, array ('active' => '1')) -> rad () -> sista_meddelande; returnera htmlspecialchars ($ last_message);
Gå nu till system / application / controllers och skapa en ny fil som heter twitter.php.
Låt oss lägga till några rader:
klass Twitter utökar Controller funktion Twitter () förälder :: Controller (); $ This-> last> modell (twitter_model ');
Detta är en enkel CI-konstruktör som laddar vår twitter_model. Så det kommer att vara tillgängligt för oss inom hela kontrollenheten.
Nu kommer index() metod.
funktionsindex () $ data ['heading'] = 'Hej, skicka en tweet!'; $ data ['last_message'] = $ this-> twitter_model-> getLastMessage (); $ data ['active_user'] = $ this-> twitter_model-> getActiveAccount () -> användarnamn; $ this-> load-> view ("header", $ data); $ This-> last> vy ( 'index'); $ This-> last> vy ( 'sidfot');
Vi skickar information som lite text, vårt senaste meddelande och användarnamnet för den aktiva användaren till $ uppgifter array.
Tack vare vår twitter_model Det är en film att ta det sista meddelandet och det aktiva användarnamnet. Vi laddar åtminstone lite
visningar som vi kommer att skapa efter att vi har avslutat vår controller. Låt oss bygga uppdatering metod.
// uppdatera vår status på twitter (nytt meddelande) funktionsuppdatering () if ($ this-> input-> post ('submit')) $ this-> load-> library ('form_validation'); $ This-> form_validation-> set_error_delimiters (',''); $ this-> form_validation-> set_rules ('message', 'Message', 'trim | required' min_length [5] | max_length [140] '); om ($ this-> form_validation-> run () == FALSE) $ this-> index (); annars $ message = $ this-> input-> post ('message'); // få useraccount data $ account = $ this-> twitter_model-> getActiveAccount (); $ username = $ account-> användarnamn; $ password = $ account-> lösenord; // skicka en tweet om ($ this-> twitter_model-> update_status ($ användarnamn, $ lösenord, $ meddelande)) redirect ('twitter'); else $ data ['error'] = 'Det uppstod ett fel när du uppdaterade din status'; $ this-> load-> view ("header", $ data); $ This-> last> vy ( 'fel'); $ This-> last> vy ( 'sidfot');
Det kan vara förvirrande igen men vi kommer att gå igenom det delvis.
om ($ this-> input-> post ('submit')) $ this-> load-> library ('form_validation'); $ This-> form_validation-> set_error_delimiters (',''); $ this-> form_validation-> set_rules ('message', 'Message', 'trim | required' min_length [5] | max_length [140] '); om ($ this-> form_validation-> run () == FALSE) $ this-> index ();
Med $ This-> input> post (submit ') Vi kontrollerar om formuläret skickades - vilket vi kommer att skapa senare i vår huvudvy
fil. Efter det laddar vi form_validation bibliotek eftersom vi vill se till att vissa insatser kräver vissa regler,
som ett minimum och en maximal längd på 5 och 140 tecken. Dessutom trimmar vi bort whitespace med trimma och
ställer in fältet som nödvändig eftersom vi inte behöver ett tomt meddelande. Funktionen set_rules tar som den första parametern,
namnet på fältet, vårt fall meddelande (som kommer att skapas snart i vyn) och som andra parameter en människa
namnet på det här fältet, som kommer att införas i felmeddelandet (kommer att ske i visningsfilen).
Vi ringer $ This-> form_validation-> run (), som kan återvända SANN eller FALSK. Om en regel vi satte bröts den
kommer att återvända FALSK och vi ringer helt enkelt vår index() metod. I visningen filer som kallas av index () -metoden
Felmeddelanden visas efter att vi har skapat våra synpunkter.
annars $ message = $ this-> input-> post ('message'); // få useraccount data $ account = $ this-> twitter_model-> getActiveAccount (); $ username = $ account-> användarnamn; $ password = $ account-> lösenord; // skicka en tweet om ($ this-> twitter_model-> update_status ($ användarnamn, $ lösenord, $ meddelande)) redirect ('twitter'); else $ data ['error'] = 'Det uppstod ett fel när du uppdaterade din status'; $ this-> load-> view ("header", $ data); $ This-> last> vy ( 'fel'); $ This-> last> vy ( 'sidfot');
Tack vare vår twitter_model, igen är det så lätt att hämta Användarnamn och den Lösenord av den aktuella aktiva användaren.
Vi kan också göra $ username = $ this-> twitter_model-> getActiveAccount () -> användarnamn men jag tror för den här handledningen är det här
lite lättare att förstå.
Använder sig av ($ This-> twitter_model-> update_status) vi kallar den metod som kommer att "prata" till Twitter. Det berättar Twitter vår
Användarnamn, Lösenord och vårt meddelande. Om statusen uppdaterades lyckades vi omdirigera med dirigera om() från urlhjälpare.
Om något var fel, ställde vi ett felmeddelande och laddar några visningsfiler, som kommer att skapas i nästa steg :).
Controller ser nu ut så här:
klass Twitter utökar Controller funktion Twitter () förälder :: Controller (); $ This-> last> modell (twitter_model '); funktionsindex () $ data ['heading'] = 'Hej, skicka en tweet!'; $ data ['last_message'] = $ this-> twitter_model-> getLastMessage (); $ data ['active_user'] = $ this-> twitter_model-> getActiveAccount () -> användarnamn; $ this-> load-> view ("header", $ data); $ This-> last> vy ( 'index'); $ This-> last> vy ( 'sidfot'); // uppdatera vår status på twitter (nytt meddelande) funktionsuppdatering () if ($ this-> input-> post ('submit')) $ this-> load-> library ('form_validation'); $ This-> form_validation-> set_error_delimiters (',''); $ this-> form_validation-> set_rules ('message', 'Message', 'trim | required' min_length [5] | max_length [140] '); om ($ this-> form_validation-> run () == FALSE) $ this-> index (); annars $ message = $ this-> input-> post ('message'); // få useraccount data $ account = $ this-> twitter_model-> getActiveAccount (); $ username = $ account-> användarnamn; $ password = $ account-> lösenord; // skicka en tweet om ($ this-> twitter_model-> update_status ($ användarnamn, $ lösenord, $ meddelande)) redirect ('twitter'); else $ data ['error'] = 'Det uppstod ett fel när du uppdaterade din status'; $ this-> load-> view ("header", $ data); $ This-> last> vy ( 'fel'); $ This-> last> vy ( 'sidfot'); annars omdirigering ('twitter');
Nu ska vi skapa våra visningsfiler. Gå till system / applikation / vyer och skapa följande filer:
De header.php kommer att innehålla den grundläggande html-metainformationen, vår CSS-länk, och öppningsetiketterna hos våra huvudsakliga divs,
#omslag och #main.
Använda Twitter API med CodeIgniter Vi använder base_url () som vi konfigurerat för att referera till vår CSS-fil, som kommer att skapas i nästa steg.
De footer.php innehåller helt enkelt våra stängningskoder.
De index.php är där festen går.
( konto: )
'Update_form')); ?> "meddelande", "maxlängd" => '140')); ?>
Alla variabler som används här passeras genom index() metod från vår controller. Utöver det,
vi använder formhjälpmedel att skapa en enkel HTML-blankett. Kom ihåg, jag berättade felhanteringen för
meddelandefältet kommer att göras här; form_error ( 'meddelande') gör det magiska.
Nedanför formuläret visar vi det senaste meddelandet skickat av den aktiva användarens konto.
Slutligen error.php kommer att användas för en anpassad felfil om statusuppdateringen misslyckades.
För att göra det lite sötare, lägger vi till några CSS. Gå till systemet/
och skapa mappen css. Inne i den mappen skapa en fil som heter style.css och sätt in
följande kod.
/ * Återställ CSS * / html, kropp, div, span, objekt, h1, h2, h3, h4, h5, h6, p, blockquote, före en adress, kod, img, liten, stark, dl, dt, dd, ol, ul, li, fältet, form, etikett margin: 0; vaddering: 0; gräns: 0; kontur: 0; typsnittstorlek: 100%; vertikaljustering: baslinje; bakgrund: transparent; kropp linjehöjd: 1,5; font-family: Arial, sans-serif; marginal: 0; ol, ul, li listestil: none; list-style-type: none; .clear clear: both; / * DEFAULTS * / h3 färg: # 35CCFF; font-size: 20px; / * CUSTOM * / #wrapper width: 900px; marginal: 0 auto; / * main * / #main margin-top: 50px; #main h3 span font-size: 14px; färg: #CCCCCC; #main h3 a color: #cccccc; / * form * / #update_form input width: 888px; padding: 5px; gränsen: 1px solid # d3d3d3; display: block; #update_form input [typ = "submit"] bredd: auto; margin-top: 10px; background-color: # 000000 ;; kant: none; färg vit; font-size: 12px; font-weight: bold; markören: pointer; padding: 3px; div.error display: block; background-color: # FB8A8A; gräns: 1px fast # FF3B3B; padding: 5px; färg: #ffffff; Bredd: 50%; margin-bottom: 30px; font-weight: bold; marginal: 0 auto 10px auto; text-align: center; / * senaste meddelande * / #last_message fieldset border: 1px dashed # d3d3d3; padding: 5px; margin-top: 30px; #last_message fältet p padding: 5px; font-size: 18px; font-weight: normal; #last_message legend span font-size: 12px;
Jag använder Eric Meyers CSS återställ för att neutralisera vyn på alla webbläsare. Din ansökan ska nu likna bilden nedan.
Låt oss testa vår nya ansökan. Vi släpper ett meddelande och trycker på uppdatering knapp!
Efter uppdateringen gjordes:
Låt oss titta på Twitter :)
om vi bryter mot en formvalideringsregel genom att försöka skicka ett tomt meddelande:
Jag hoppas verkligen att jag hjälpte dig lite med att lära CodeIgniter och hur du använder det stora Twitter API! Skulle du ha gjort något annorlunda? Om så är fallet, låt oss veta!