Vårt sosialt Twitter-oppsett

Den første delen av serien tar del i det innledende arbeidet med å konsumere StackExchange REST API for å hente de viktigste spørsmålene. Dette andre del vil fokusere på å sette opp støtten som er nødvendig for å samhandle med Twitter REST API-ene ved hjelp av Spring Social Twitter-prosjektet. Målet er å kunne tweet disse spørsmålene, to per dag, på flere kontoer, hver med fokus på et enkelt emne.

1. Bruke vårens sosiale Twitter

De nødvendige avhengighetene som er nødvendige for å bruke Spring Social Twitter-prosjektet, er greie. Først definerer vi vår-sosial-twitter seg selv:

 org.springframework.sosial vår-sosial-twitter 1.1.0.RELEASE 

Deretter må vi overstyre noen av dets avhengigheter med mer oppdaterte versjoner:

 org.springframework spring-core 4.1.0.RELEASE org.springframework spring-web 4.1.0.RELEASE org.codehaus.jackson jackson-mapper-asl 1.9.13 

Både vårkjernen og vår-nett er definert som avhengigheter av vår-sosial-twitter men med eldre versjoner3.0.7.UTSLIPP og 3.1.0.RELEASE henholdsvis. Å overstyre disse i vår egen pom sikrer at prosjektet bruker de oppdaterte versjonene vi har definert i stedet for disse eldre arvede versjonene.

2. Opprette en Twitter-applikasjon

Denne brukssaken - tvitring på en personlig konto og ikke på vegne av andre brukere på kontoene sine, er det enkelt. Det faktum at det er enkelt, lar oss dispensere med det meste av OAuth-orkestrering som er nødvendig hvis applikasjonen trenger å tweet for flere brukere, på hver av deres Twitter-kontoer.

Så for vår bruk, vil vi gjøre det lage TwitterTemplate direkte, ettersom vi manuelt kan konfigurere alt vi trenger for å gjøre det.

Det første vi trenger er en dev-applikasjon - en kan opprettes her etter innlogging. Etter å ha opprettet applikasjonen vil vi ha en Forbrukernøkkel og Forbrukerhemmelighet - disse er hentet fra siden til søknaden - på Detaljer under fanen OAuth-innstillinger.

For å la applikasjonen tweet på kontoen, Lese og skrive Adgang må være satt til å erstatte standard Lese bare privilegier.

3. Avsetning a TwitterTemplate

Neste, den TwitterTemplate krever en Tilgangstoken og en Tilgang Token Secret skal klargjøres. Disse kan også genereres fra applikasjonssiden - under Detaljer fane - Opprett tilgangstokenet mitt. Både Access Token og Secret kan deretter hentes fra under OAuth-verktøy fanen.

Nye kan alltid regenereres på Detaljer fanen, via Gjenopprett tilgangstokenet mitt handling.

På dette punktet har vi alt vi trenger - Forbrukernøkkelen og Forbrukerhemmeligheten, samt Access Token og Access Token Secret - noe som betyr at vi kan fortsette og lage vår TwitterTemplate for den applikasjonen:

ny TwitterTemplate (consumerKey, consumerSecret, accessToken, accessTokenSecret);

4. Én mal per konto

Nå som vi har sett hvordan vi kan lage en singel TwitterTemplate til en enkelt konto, kan vi se tilbake på bruken vår igjen - vi trenger å tweet på flere kontoer - noe som betyr at vi trenger flere TwitterTemplate tilfeller.

Disse kan enkelt opprettes på forespørsel, med en enkel mekanisme:

@Komponent offentlig klasse TwitterTemplateCreator {@Autowired private Environment env; offentlig Twitter getTwitterTemplate (String accountName) {String consumerKey = env.getProperty (accountName + ".consumerKey"); String consumerSecret = env.getProperty (accountName + ".consumerSecret"); Streng accessToken = env.getProperty (accountName + ".accessToken"); Streng accessTokenSecret = env.getProperty (kontonavn + ".accessTokenSecret"); Forutsetninger. CheckNotNull (forbrukernøkkel); Forutsetninger. CheckNotNull (consumerSecret); Forutsetninger. CheckNotNull (accessToken); Forutsetninger.checkNotNull (accessTokenSecret); TwitterTemplate twitterTemplate = ny TwitterTemplate (consumerKey, consumerSecret, accessToken, accessTokenSecret); returner twitterTemplate; }}

De fire sikkerhetsgjenstandene er selvfølgelig eksternalisert i en eiendomsfil, etter konto; for eksempel for SpringAtSO-kontoen:

SpringAtSO.consumerKey = nqYezCjxkHabaX6cdte12g SpringAtSO.consumerSecret = 7REmgFW4SnVWpD4EV5Zy9wB2ZEMM9WKxTaZwrgX3i4A SpringAtSO.accessToken = 1197830142-t44T7vwgmOnue8EoAxI1cDyDAEBAvple80s1SQ3 SpringAtSO.accessTokenSecret = ZIpghEJgFGNGQZzDFBT5TgsyeqDKY2zQmYsounPafE

Dette gir en god blanding av fleksibilitet og sikkerhet - sikkerhetsinformasjonen er ikke en del av kodebasen (som er open source), men lever uavhengig av filsystemet og blir hentet av Spring og tilgjengelig i Spring Enviroment via en enkel konfigurasjon:

@Configuration @PropertySource ({"file: ///opt/stack/twitter.properties"}) offentlig klasse TwitterConfig {//}

Eiendommer om våren er et emne som har blitt diskutert før, så vi vil ikke gå nærmere inn på dette emnet her.

Til slutt, a test vil verifisere at en konto har den nødvendige sikkerhetsinformasjonen som er lett tilgjengelig i vårmiljøet; hvis eiendommene ikke er til stede, getTwitterTemplate logikken skulle mislykkes i testen med en NullPointerException:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (klasser = {TwitterConfig.class}) offentlig klasse TwitterTemplateCreatorIntegrationTest {@Autowired privat TwitterTemplateCreator twitterTemplateCreator; // @Test public void givenValidAccountSpringAtSO_whenRetrievingTwitterClient_thenNoException () {twitterTemplateCreator.getTwitterTemplate (SimpleTwitterAccount.SpringAtSO.name ()); }}

5. Tweeting

Med TwitterTemplate opprettet, la oss vende oss til den faktiske handlingen av tvitring. For dette bruker vi en veldig enkel tjeneste som godtar en TwitterTemplate og bruke den underliggende API-en for å lage en tweet:

@Service offentlig klasse TwitterService {private Logger logger = LoggerFactory.getLogger (getClass ()); offentlig ugyldig tweet (Twitter twitter, String tweetText) {prøv {twitter.timelineOperations (). updateStatus (tweetText); } fange (RuntimeException ex) {logger.error ("Kan ikke tweet" + tweetText, ex); }}}

6. Testing av TwitterTemplate

Og til slutt kan vi skrive en integrasjonstest for å utføre hele prosessen med klargjøring av a TwitterTemplate for en konto og tweeting på den kontoen:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (klasser = {TwitterConfig.class}) offentlig klasse TweetServiceLiveTest {@Autowired privat TwitterService twitterService; @Autowired privat TwitterTemplateCreator twitterCreator; @Test offentlig ugyldig når Tweeting_thenNoExceptions () {Twitter twitterTemplate = twitterCreator.getTwitterTemplate ("SpringAtSO"); twitterService.tweet (twitterTemplate, "First Tweet"); }}

7. Konklusjon

På dette punktet er Twitter API vi har opprettet, helt atskilt fra StackExchange API og kan brukes uavhengig av den aktuelle bruken, for å tweet noe.

Det neste logiske trinnet i prosessen med å twitre spørsmål fra Stack Exchange-kontoer er å lage en komponent - samhandle med både Twitter og StackExchange API som vi har presentert så langt - dette vil være fokus for neste artikkel i denne serien.


$config[zx-auto] not found$config[zx-overlay] not found