首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建cron作业以使用spring-social从用户的墙上获取twitter帖子

创建cron作业以使用spring-social从用户的墙上获取twitter帖子
EN

Stack Overflow用户
提问于 2013-11-24 20:13:36
回答 1查看 290关注 0票数 0

我正在尝试创建一个cron作业,它应该获取登录用户的tweet。

我试着这样做:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
@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);
    }

}

但是它当然不能工作,因为twitter连接存在于请求作用域中(我该如何配置这个作业?

EN

回答 1

Stack Overflow用户

发布于 2013-11-25 09:01:19

登录的用户与web会话相关联,因此在应用程序的web级别获取请求范围的Twitter对象是没有问题的。

但是,计划的/cron作业独立于应用程序的web层运行。它们没有“登录用户”的概念,因为它们仅仅是后台bean,类似于服务或DAO,因为它们没有当前用户是谁的概念。从MessagesSaver的角度来看,谁是已登录的用户?很容易就会有很多登录的用户。它被期望代表哪一个工作?

您可以将UsersConnectionRepository注入到MessagesSaver中,使用它来获取特定用户的ConnectionRepository,然后使用它来获取Twitter连接(并由此获得Twitter API绑定)。棘手的一点是(再一次)谁是登录的用户?可能有MessagesSaver应该使用的many...which one?

抛开你在这里写的东西,你想要实现什么?也许还有另一种方法可以做你需要的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20174317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档