Рубрики
Без рубрики

Весенняя социальная настройка Twitter

Весенняя социальная настройка Twitter – чириканье на свой собственный счет

Автор оригинала: Eugen Paraschiv.

Первая часть серии была касаться первоначальной работы потребляя StackExchange REST API для того, чтобы получить свои главные вопросы. Этот вторая часть сосредоточится на создании поддержки, необходимой для взаимодействия с API Twitter REST с помощью проекта Spring Social Twitter. Цель состоит в том, чтобы иметь возможность чирикать эти вопросы, два в день, на нескольких счетах, каждый сосредоточены на одной теме.

1. Использование Весна Социальный Twitter

Необходимые зависимости, необходимые для использования проекта Spring Social Twitter, просты. Во-первых, мы определяем весенне-социально-twitter себя:


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

Затем нам нужно переопределить некоторые из его зависимостей с более новыми версиями:


   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

Оба весенне-основной и весенне-веб- определяются как зависимости от весенне-социально-twitter но с более старые версии3.0.7.ВЫПУСК и 3.1.0.ВЫПУСК соответственно. Переопределение их в нашем собственном пом гарантирует, что проект использует последние версии, которые мы определили вместо этих старых унаследованных версий.

2. Создание приложения Twitter

Этот usecase – чирикал на личные счета а не от имени других пользователей на их счетах, является простым. Тот факт, что это просто позволяет нам обойтись без большинства OAuth оркестровка необходимо, если приложение будет необходимо чирикать для нескольких пользователей, на каждом из своих учетных записей Twitter.

Таким образом, для нашего usecase, мы создать TwitterTemplate непосредственно , как мы можем вручную настроить все, что нам нужно сделать это.

Первое, что нам нужно, это разработка приложений – можно созданный здесь , после входа в систему. После создания приложения у нас будет Потребительские ключевые и Секретная защита – они получены со страницы приложения – на странице Подробности вкладка, под Настройки OAuth .

Кроме того, для того, чтобы позволить приложению чирикать на счет, Читать и писать Доступ должны быть установлены для замены Читать только привилегии.

3. Обеспечение TwitterTemplate

Далее, TwitterTemplate требует Доступ к токену и Доступ Token Секретный должны быть предусмотрены. Они также могут быть получены со страницы приложения – под Подробности вкладка – Создайте свой доступ к токену . Токен доступа и секрет могут быть извлечены из-под OAuth инструмент вешалка.

Новые всегда можно регенерировать на Подробности вкладка, через Воссоздайте мой доступ к токену действие.

На данный момент у нас есть все, что нам нужно – потребительский ключ и секрет потребителя, а также токен доступа и секрет токенов доступа – что означает, что мы можем идти вперед и создавать наши TwitterTemplate для этого приложения:

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

4. Один шаблон на учетную запись

Теперь, когда мы увидели, как создать единый TwitterTemplate для одна учетная , Мы можем оглянуться на наш usecase снова – мы должны чирикать на нескольких счетах – что означает, что нам нужно несколько TwitterTemplate Экземпляров.

Они могут быть легко созданы по запросу, с простым механизмом:

@Component
public class TwitterTemplateCreator {
   @Autowired
   private Environment env;

   public Twitter getTwitterTemplate(String accountName) {
      String consumerKey = env.getProperty(accountName + ".consumerKey");
      String consumerSecret = env.getProperty(accountName + ".consumerSecret");
      String accessToken = env.getProperty(accountName + ".accessToken");
      String accessTokenSecret = env.getProperty(accountName + ".accessTokenSecret");
      Preconditions.checkNotNull(consumerKey);
      Preconditions.checkNotNull(consumerSecret);
      Preconditions.checkNotNull(accessToken);
      Preconditions.checkNotNull(accessTokenSecret);

      TwitterTemplate twitterTemplate = 
         new TwitterTemplate(consumerKey, consumerSecret, accessToken, accessTokenSecret);
      return twitterTemplate;
   }
}

Четыре артефакта безопасности, конечно, экстернализированы в файле свойств , по счету; например, для Счетная SpringAtSO:

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

Это обеспечивает хорошее сочетание гибкости и безопасности – учетные данные безопасности не являются частью кодовой базы (которая является открытым исходным кодом ), но живут независимо от файловой системы и подобраны Весной и доступны в весенней enviroment через простую конфигурацию:

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

Свойства весной являются предметом, который обсуждался ранее, поэтому мы не будем идти в более подробную информацию по этому вопросу здесь.

Наконец, тестовый проверит, располагает ли учетная запись необходимой информацией о безопасности, легко доступной в весенней среде; если свойства не присутствуют, getTwitterTemplate логика должна провалить тест с NullPointerЭксцепция :

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

5. Твиттер

С TwitterTemplate созданный, давайте обернемся фактическим действием чирикал . Для этого мы будем использовать очень простую услугу, принимая TwitterTemplate и используя свой базовый API для создания твита:

@Service
public class TwitterService {
   private Logger logger = LoggerFactory.getLogger(getClass());

   public void tweet(Twitter twitter, String tweetText) {
      try {
         twitter.timelineOperations().updateStatus(tweetText);
      } catch (RuntimeException ex) {
         logger.error("Unable to tweet" + tweetText, ex);
      }
   }
}

6. Тестирование TwitterTemplate

И, наконец, мы можем написать интеграционный тест для выполнения всего процесса подготовки TwitterTemplate для учетной записи и чирикал на этот счет:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { TwitterConfig.class })
public class TweetServiceLiveTest {
   @Autowired
   private TwitterService twitterService;
   @Autowired
   private TwitterTemplateCreator twitterCreator;

   @Test
   public void whenTweeting_thenNoExceptions() {
      Twitter twitterTemplate = twitterCreator.getTwitterTemplate("SpringAtSO");
      twitterService.tweet(twitterTemplate, "First Tweet");
   }
}

7. Заключение

На данный момент созданный нами API Twitter полностью отделен от API StackExchange и может быть использован независимо от этого конкретного приложения, чтобы чирикать что-либо.

Следующим логическим шагом в процессе твитов вопросов из учетных записей Stack Exchange является создание компонента , взаимодействующих с как Twitter, так и StackExchange API которые мы представили до сих пор – это будет в центре внимания следующей статьи в этой серии.