使用Facebook API(通过Symfony)导致我的页面墙上的多个帖子

时间:2017-09-08 11:59:06

标签: php facebook symfony facebook-graph-api cron

我在Facebook上自动发布我的博客文章时遇到了问题。我一直在网上寻找解决方案,但似乎我是唯一一个面对这个问题的人。

以下是所有信息:

  • 我正在使用Symfony 3作为我的博客
  • 我保存了一个“publicationDate”($ article-> getPublicationDate())来推迟文章发布和一个“hasBeenSentOnSocialNetworks”(($ article-> getIsOnline())布尔值来知道它是否已经在Twitter上发送了Facebook墙
  • 我已设置控制器操作以检查是否有任何文章要在线设置。
  • 调用控制器时,我会得到一个离线文章列表(publicationDate< now AND getIsOnline == false)
  • 他们每个人都被推到了社交网络上,这要归功于Martin Georgiev(https://github.com/martin-georgiev/social-post-bundle
  • 最后,我刷新了$ article-> setIsOnline(true),以避免每次完成后发布。

随着Twitter发布我的文章和Facebook,一切正常。我的数据库保存了isOnline = true。

使用OVH我每小时只能运行CRON任务。 CRON任务完美地完成了工作,每篇文章只在社交网络上发布了1篇帖子。我的CRON正在调用一个文件,该文件使用curl打开处理发布的控制器页面。

但是为了有更好的反应时间,我尝试在Symfony中添加一个事件,以便每次加载页面时,它都会检查是否有要在社交网络上发布的文章。这很好,除了我在Twitter上发布了2篇文章,在Facebook上发表了大约20-30篇...我已经尝试过各种各样的东西:kernel.response,kernel.controller,kernel.request,我做了一个“返回”。如果事件不是MASTER_REQUEST。没有成功。

然后我决定使用twig来调用我的CRON任务打开的控制器。我在base.html.twig的底部添加了一个“{{render(controller(....))}}”。只有一个帖子,它适用于Twitter。但是在Facebook上,它会在同一个出版物中发送十几次。

我有点失落。现在已经好几天了,我正试图解决这个问题。任何帮助或建议将不胜感激!谢谢:))

我的控制器动作:

$repository = $this->getDoctrine()->getRepository(Article::class);
$articles = $repository->findAllOfflineArticles();

  foreach ($articles as $article) {
    $content = $article->getSocialContent();

    if($content == null){
      $content = $article->getTitle();
    }

    $link = $this->get('router')->generate('article_show', array('slug' =>       $article->getSlug()), UrlGeneratorInterface::ABSOLUTE_URL);
    // Post on social networks
    $message = new \MartinGeorgiev\SocialPost\Provider\Message($content, $link);
    $this->get('social_post')->publish($message);
    //

    $article->setIsOnline(true);
    $em = $this->getDoctrine()->getManager();
    $em->persist($article);
    $em->flush();
  }

---------------- 编辑1 ----------------

感谢@AhmetGunes睁开眼睛。我一直在寻找代码中的错误,我尝试了很多不同的事情,以至于我对情况的理解变得模糊。似乎问题如下:

public function findAllOfflineArticles(){
		return $this
			->createQueryBuilder('a')
			->where('a.isPublished = :is_published')
			->andWhere('a.isValidated = :is_validated')
			->andWhere('a.isOnline <= :is_online')
			->andWhere('a.publicationDate <= :now')
			->setParameter('now', new \Datetime())
			->setParameter('is_published', true)
			->setParameter('is_validated', true)
			->setParameter('is_online', false)
			->orderBy('a.publicationDate', 'ASC')
			->getQuery()
			->getResult()
		;
}

问题很明显,尽管我不太明白它是如何以这种方式工作的。 查询正在提取

->andWhere('a.isOnline <= :is_online')
我纠正了这个大错:
->andWhere('a.isOnline = :is_online')
并在Facebook上只发了一个帖子!

但是,为什么Doctrine没有告诉我我的请求有问题?一旦isOnline设置为true,脚本怎么不再启动?

---------------- 编辑2 ----------------

校正工作正常两次。但现在它像以前一样回归。 Facebook上的28-29个出版物。我明白已经筋疲力尽了。这让我发疯了。

0 个答案:

没有答案