Я пытаюсь создать задание cron, которое должно получать твиты пользователя в журнале.Создание задания cron для извлечения сообщений Twitter из пользовательской стены, используя spring-social
Я пытаюсь сделать это следующим образом:
public class MessagesSaver {
private static final Logger logger = LoggerFactory
.getLogger(MessagesSaver.class);
private static String TWITTER_NETWORK = "twitter";
private static String FACEBOOK_NETWORK = "facebook";
private static int MAX_TWEET_COUNT_PER_PAGE = 50;
@Autowired
private MessageRepository messageRepository;
@Autowired
private Twitter twitter;
@Scheduled(cron = "0 30 * * * *")
public void getMessagesFromSocialNetworks() {
if (twitter != null) {
List<Tweet> tweets = twitter.timelineOperations().getUserTimeline(
MAX_TWEET_COUNT_PER_PAGE);
parseAndSaveTwitterPosts(tweets);
}
}
}
и SocialConfig:
@Configuration
@EnableSocial
public class SocialConfig implements SocialConfigurer {
@Inject
private DataSource dataSource;
//
// SocialConfigurer implementation methods
//
@Override
public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig,
Environment env) {
cfConfig.addConnectionFactory(new TwitterConnectionFactory(env
.getProperty("twitter.consumerKey"), env
.getProperty("twitter.consumerSecret")));
}
@Override
public UserIdSource getUserIdSource() {
return new UserIdSource() {
@Override
public String getUserId() {
return "admin";
}
};
}
@Override
public UsersConnectionRepository getUsersConnectionRepository(
ConnectionFactoryLocator connectionFactoryLocator) {
return new JdbcUsersConnectionRepository(dataSource,
connectionFactoryLocator, Encryptors.noOpText());
}
@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
public Twitter twitter(ConnectionRepository repository) {
Connection<Twitter> connection = repository
.findPrimaryConnection(Twitter.class);
return connection != null ? connection.getApi() : null;
}
//
// Web Controller and Filter Beans
//
@Bean
public ConnectController connectController(
ConnectionFactoryLocator connectionFactoryLocator,
ConnectionRepository connectionRepository) {
ConnectController connectController = new ConnectController(
connectionFactoryLocator, connectionRepository);
return connectController;
}
@Bean
public ProviderSignInController providerSignInController(
ConnectionFactoryLocator connectionFactoryLocator,
UsersConnectionRepository usersConnectionRepository) {
return new ProviderSignInController(connectionFactoryLocator,
usersConnectionRepository, new SimpleSignInAdapter(
new HttpSessionRequestCache()));
}
@Bean
public DisconnectController disconnectController(
UsersConnectionRepository usersConnectionRepository, Environment env) {
return new DisconnectController(usersConnectionRepository,
env.getProperty("facebook.clientSecret"));
}
@Bean
public ReconnectFilter apiExceptionHandler(
UsersConnectionRepository usersConnectionRepository,
UserIdSource userIdSource) {
return new ReconnectFilter(usersConnectionRepository, userIdSource);
}
}
Но, конечно, это не работает, потому что соединение щебет жить в рамках запроса ( Как я могу настроить это задание?
Спасибо за ваш ответ) Должно быть только 1 пользователь, который войдет в твиттер. –
Я пытаюсь объяснить, что я хочу делать) У меня есть 1 учетная запись Twitter и вы хотите получить новый твит этого пользователя (или получить твиты с помощью хэш-тега) по заданию и поместить его в базу данных. Это все. –
, когда я пытаюсь сделать именно то, как вы говорите («Вы можете вставить UserConnectionRepository в MessageSaver, использовать его для получения ConnectionRepository для конкретного пользователя, а затем использовать его для получения соединения Twitter (и от этого, привязки API Twitter)), Я получаю исключение: Ошибка создания bean-компонента с именем 'scopedTarget.connectionRepository': Scope 'request' неактивен для текущего потока; рассмотрите возможность определения доверенного прокси для этого компонента, если вы намерены ссылаться на него из одноэлементного; –