Forår Social Twitter-opsætning

Den første del af serien dealth med det indledende arbejde med at forbruge StackExchange REST API for at hente sine topspørgsmål. Det her anden del vil fokusere på at oprette den nødvendige support til at interagere med Twitter REST API'erne ved hjælp af Spring Social Twitter-projektet. Det endelige mål er at være i stand til at tweet disse spørgsmål to gange om dagen på flere konti, hver med fokus på et enkelt emne.

1. Brug af social social Twitter

De nødvendige afhængigheder, der er nødvendige for at bruge Spring Social Twitter-projektet, er ligetil. Først definerer vi forår-social-twitter sig selv:

 org.springframework.social spring-social-twitter 1.1.0.RELEASE 

Derefter er vi nødt til at tilsidesætte nogle af dets afhængigheder med mere opdaterede versioner:

 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 

Begge fjederkerne og fjeder-web er defineret som afhængigheder af forår-social-twitter men med ældre versioner3.0.7.FRIGIVELSE og 3.1.0.FRIGIVELSE henholdsvis. Tilsidesættelse af disse i vores egen pom sikrer, at projektet bruger de opdaterede versioner, som vi har defineret i stedet for disse ældre nedarvede versioner.

2. Oprettelse af en Twitter-applikation

Denne usekase - kvidre på en personlig konto og ikke på vegne af andre brugere på deres konti, er en simpel. Det faktum, at det er simpelt, giver os mulighed for at dispensere over det meste af OAuth-orkestrering, der er nødvendig, hvis applikationen skulle tweet for flere brugere på hver af deres twitter-konti.

Så for vores usecase, vil vi oprette Twitter-skabelon direkte, da vi manuelt kan konfigurere alt, hvad vi har brug for til at gøre det.

Den første ting, vi har brug for, er en dev-applikation - en kan oprettes her efter login. Efter oprettelse af applikationen har vi en Forbrugernøgle og Forbrugerhemmelighed - disse fås fra siden i applikationen - på detaljer under fanen OAuth-indstillinger.

For at tillade, at applikationen twitter på kontoen, Læs og skriv Adgang skal være indstillet til at erstatte standard Læs kun privilegier.

3. Provisionering a Twitter-skabelon

Dernæst Twitter-skabelon kræver en Adgangstoken og en Adgang Token Secret skal tilvejebringes. Disse kan også genereres fra applikationssiden - under detaljer fane - Opret mit adgangstoken. Både adgangstoken og hemmeligheden kan derefter hentes fra under OAuth-værktøj fanen.

Nye kan altid regenereres på detaljer fane via Genskab mit adgangstoken handling.

På dette tidspunkt har vi alt, hvad vi har brug for - Forbrugernøglen og Forbrugerhemmeligheden samt Access Token og Access Token Secret - hvilket betyder, at vi kan gå videre og skabe vores Twitter-skabelon til den applikation:

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

4. En skabelon pr. Konto

Nu hvor vi har set hvordan man opretter en enkelt Twitter-skabelon til en enkelt konto, kan vi se tilbage på vores usecase igen - vi er nødt til at tweet på flere konti - hvilket betyder, at vi har brug for flere Twitter-skabelon tilfælde.

Disse kan let oprettes efter anmodning med en simpel 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"); Forudsætninger.checkNotNull (forbrugernøgle); Forudsætninger. CheckNotNull (consumerSecret); Forudsætninger.checkNotNull (accessToken); Forudsætninger.checkNotNull (accessTokenSecret); TwitterTemplate twitterTemplate = ny TwitterTemplate (consumerKey, consumerSecret, accessToken, accessTokenSecret); returner twitterTemplate; }}

De fire sikkerhedsartefakter er selvfølgelig eksternaliseret i en egenskabsfilefter konto for eksempel til SpringAtSO-kontoen:

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

Dette giver mulighed for en god blanding af fleksibilitet og sikkerhed - sikkerhedsoplysningerne er ikke en del af kodebasen (som er opensource), men lever uafhængigt af filsystemet og hentes af Spring og er tilgængelige i Spring Enviroment via en simpel konfiguration:

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

Ejendomme om foråret er et emne, der er blevet diskuteret før, så vi går ikke nærmere ind på dette emne her.

Endelig a prøve vil kontrollere, at en konto har de nødvendige sikkerhedsoplysninger, der er let tilgængelige i forårsmiljøet; hvis egenskaberne ikke er til stede, getTwitterTemplate logik skulle fejle testen med en NullPointerException:

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

5. Tweeting

Med Twitter-skabelon oprettet, lad os vende os til den aktuelle handling af tweeting. Til dette bruger vi en meget enkel tjeneste, der accepterer en Twitter-skabelon og ved hjælp af dens underliggende API til at oprette en tweet:

@Service offentlig klasse TwitterService {privat 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. Test af Twitter-skabelon

Og endelig kan vi skrive en integrationstest for at udføre hele processen med klargøring af en Twitter-skabelon til en konto og kvidre på den konto:

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

7. Konklusion

På dette tidspunkt er den Twitter API, vi har oprettet, helt adskilt fra StackExchange API og kan bruges uafhængigt af den pågældende usecase til at tweet noget.

Det næste logiske trin i processen med tweeting af spørgsmål fra Stack Exchange-konti er at oprette en komponent - interagere med både Twitter og StackExchange API'erne som vi har præsenteret hidtil - dette vil være fokus for den næste artikel i denne serie.


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