Jarné sociálne nastavenie Twitteru

Prvá časť seriálu obsahuje úvodné práce so spotrebovaním rozhrania REST API StackExchange s cieľom získať najaktuálnejšie otázky. Toto druhá časť sa zameria na nastavenie podpory potrebnej na interakciu s rozhraním API Twitter REST pomocou projektu Spring Social Twitter. Konečným cieľom je byť schopný tweetovať tieto otázky, dve za deň, na niekoľkých účtoch, pričom každá sa zameriava na jednu tému.

1. Používanie jarného sociálneho Twitteru

Požadované závislosti potrebné na použitie projektu Spring Social Twitter sú priame. Najprv definujeme jarno-socialny-twitter sám:

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

Potom musíme prepísať niektoré zo závislostí novšími verziami:

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

Oboje pružinové jadro a jarný web sú definované ako závislosti od jarno-socialny-twitter ale s staršie verzie3.0.7. UVOĽNENIE a 3.1.0. UVOĽNENIE resp. Prepísanie týchto v našom vlastnom pom zabezpečí, že projekt používa namiesto týchto starších zdedených verzií aktuálne verzie, ktoré sme definovali.

2. Vytvorenie aplikácie Twitter

Tento prípad použitia - tweeting na a osobný účet a nie v mene ostatných používateľov ich účtov, je jednoduchý. Skutočnosť, že je to jednoduché, nám umožňuje upustiť od väčšiny potrebnej orchestrácie OAuth, ak by aplikácia potrebovala pípanie pre viacerých používateľov na každom z ich účtov twitter.

Takže pre našu potrebu to urobíme vytvoriť TwitterTemplate priamo, pretože všetko, čo k tomu potrebujeme, môžeme nastaviť manuálne.

Prvá vec, ktorú potrebujeme, je dev aplikácia - tu je možné vytvoriť jeden, po prihlásení. Po vytvorení aplikácie budeme mať a Spotrebiteľský kľúč a Spotrebiteľské tajomstvo - tieto sa získavajú zo stránky Aplikácie - na Detaily karta pod Nastavenia protokolu OAuth.

Aby tiež bolo možné aplikácii tweetovať na účet, Čítaj a píš Prístup musí byť nastavený tak, aby nahradil predvolené Čítať iba privilégiá.

3. Poskytovanie a TwitterTemplate

Ďalej TwitterTemplate vyžaduje Prístupový token a an Tajomstvo prístupového tokenu treba rezervovať. Môžu byť tiež generované zo stránky Aplikácia - pod Detaily karta - Vytvoriť môj prístupový token. Prístupový token aj tajomstvo je možné potom získať spod priečinka Nástroj OAuth tab.

Nové sa dajú vždy regenerovať na serveri Detaily karta, prostredníctvom Znova vytvoriť môj prístupový token akcia.

V tomto okamihu máme všetko, čo potrebujeme - spotrebiteľský kľúč a spotrebiteľské tajomstvo, ako aj prístupový token a tajomstvo prístupového tokenu - čo znamená, že môžeme pokračovať a vytvoriť TwitterTemplate pre túto aplikáciu:

nový TwitterTemplate (consumerKey, consumerSecret, accessToken, accessTokenSecret);

4. Jedna šablóna na každý účet

Teraz, keď sme videli, ako vytvoriť singel TwitterTemplate pre jediný účet, môžeme sa opäť pozrieť na svoj prípad použitia - musíme tweetovať na niekoľkých účtoch - čo znamená, že ich potrebujeme niekoľko TwitterTemplate inštancie.

Na požiadanie je možné ich ľahko vytvoriť pomocou jednoduchého mechanizmu:

@Component public class TwitterTemplateCreator {@Autowired private Environment env; public Twitter getTwitterTemplate (Reťazec accountName) {Reťazec consumerKey = env.getProperty (accountName + ".consumerKey"); Reťazec consumerSecret = env.getProperty (accountName + ".consumerSecret"); Reťazec accessToken = env.getProperty (accountName + ".accessToken"); Reťazec accessTokenSecret = env.getProperty (accountName + ".accessTokenSecret"); Preconditions.checkNotNull (consumerKey); Preconditions.checkNotNull (consumerSecret); Preconditions.checkNotNull (accessToken); Preconditions.checkNotNull (accessTokenSecret); TwitterTemplate twitterTemplate = nový TwitterTemplate (consumerKey, consumerSecret, accessToken, accessTokenSecret); návrat twitterTemplate; }}

Štyri bezpečnostné artefakty sú samozrejme externalizované v súbore vlastností, účtom; napríklad pre účet SpringAtSO:

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

To umožňuje dobrú kombináciu flexibility a bezpečnosti - bezpečnostné poverenia nie sú súčasťou kódovej základne (čo je opensource), ale žijú nezávisle na súborovom systéme a sú zhromažďované programom Spring a sú dostupné v prostredí Spring prostredníctvom jednoduchej konfigurácie:

@Configuration @PropertySource ({"file: ///opt/stack/twitter.properties"}) verejná trieda TwitterConfig {//}

Vlastnosti na jar sú predmetom, o ktorom sme už hovorili, takže sa tu nebudeme podrobnejšie zaoberať.

Nakoniec a test overí, či účet má potrebné bezpečnostné informácie ľahko dostupné v jarnom prostredí; ak vlastnosti nie sú prítomné, getTwitterTemplate logika by mala zlyhať v teste s a NullPointerException:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = {TwitterConfig.class}) verejná trieda TwitterTemplateCreatorIntegrationTest {@Autowired private TwitterTemplateCreator twitterTemplateCreator; // @Test public void givenValidAccountSpringAtSO_whenRetrievingTwitterClient_thenNoException () {twitterTemplateCreator.getTwitterTemplate (SimpleTwitterAccount.SpringAtSO.name ()); }}

5. Tweeting

Vďaka TwitterTemplate vytvorené, obráťme sa na skutočnú akciu tweetovanie. K tomu použijeme veľmi jednoduchú službu, ktorá akceptuje a TwitterTemplate a použitie jeho základného API na vytvorenie tweetu:

@Service verejná trieda TwitterService {private Logger logger = LoggerFactory.getLogger (getClass ()); public void tweet (Twitter twitter, String tweetText) {try {twitter.timelineOperations (). updateStatus (tweetText); } catch (RuntimeException ex) {logger.error ("Nemôžem tweetovať" + tweetText, ex); }}}

6. Testovanie TwitterTemplate

A nakoniec môžeme napísať test integrácie, ktorý vykoná celý proces poskytovania a TwitterTemplate pre účet a tweety na tomto účte:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = {TwitterConfig.class}) verejná trieda TweetServiceLiveTest {@Autowired súkromná služba TwitterService twitterService; @Autowired private TwitterTemplateCreator twitterCreator; @Test public void whenTweeting_thenNoExceptions () {Twitter twitterTemplate = twitterCreator.getTwitterTemplate ("SpringAtSO"); twitterService.tweet (twitterTemplate, "Prvý Tweet"); }}

7. Záver

V tomto okamihu je Twitter API, ktoré sme vytvorili, úplne oddelené od StackExchange API a je možné ho použiť nezávisle od konkrétneho prípadu použitia na tweetovanie čohokoľvek.

Ďalším logickým krokom v procese tweetovania otázok z účtov Stack Exchange je vytvorenie komponentu - interakcia s ním Twitter aj StackExchange API ktoré sme doteraz predstavili - na to sa zameria ďalší článok v tejto sérii.


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