/**
  * {@inheritdoc}
  */
 public function execute(AMQPMessage $msg)
 {
     $data = json_decode($msg->body, true, 512, $this->jsonOptions);
     $created_at = \DateTime::createFromFormat('D M j H:i:s P Y', $data['created_at']);
     $tweet_path = $data['user']['screen_name'] . '/status/' . $data['id_str'];
     $id = 'tag:twitter.com,' . $created_at->format('Y-m-d') . ':/' . $tweet_path;
     /** @var \Bangpound\Bundle\TwitterStreamingBundle\CouchDocument\AtomEntry $entry */
     $entry = new $this->atomEntryClass();
     $entry->setId($id);
     $entry->setOriginalData($msg->body, 'application/json');
     $title = new TextType();
     $title->setText($data['text']);
     $entry->setTitle($title);
     $content = new ContentType();
     $content->setContent($data['text']);
     $entry->setContent($content);
     $author = new PersonType();
     $author->setName($data['user']['name']);
     $author->setUri($data['user']['url']);
     $entry->addAuthor($author);
     $link = new LinkType();
     $link->setHref('https://twitter.com/intent/user?user_id=' . $data['user']['id_str']);
     $link->setRel('author');
     $entry->addLink($link);
     if (isset($data['entities']['hashtags'])) {
         foreach ($data['entities']['hashtags'] as $hashtag) {
             $category = new CategoryType();
             $category->setTerm($hashtag['text']);
             $entry->addCategory($category);
         }
     }
     if (isset($data['entities']['urls'])) {
         foreach ($data['entities']['urls'] as $url) {
             $link = new LinkType();
             $link->setHref($url['expanded_url']);
             if (substr_compare($url['expanded_url'], $url['display_url'], -strlen($url['display_url']), strlen($url['display_url'])) === 0) {
                 $link->setRel('shortlink');
             } else {
                 $link->setRel('nofollow');
             }
             $entry->addLink($link);
         }
     }
     if (isset($data['entities']['media'])) {
         foreach ($data['entities']['media'] as $media) {
             $link = new LinkType();
             $link->setHref($media['media_url']);
             $link->setRel('enclosure');
             if ($media['type'] == 'photo') {
                 $link->setType('image');
             }
             $link->setType('image');
             $entry->addLink($link);
         }
     }
     $link = new LinkType();
     $link->setHref('http://twitter.com/' . $tweet_path);
     $link->setRel('canonical');
     $entry->addLink($link);
     $link = new LinkType();
     $link->setHref(strtr($data['user']['profile_image_url'], ['_normal' => '']));
     $link->setRel('author thumbnail');
     $entry->addLink($link);
     $entry->setPublished($created_at);
     $source = new SourceType();
     $title = new TextType();
     $title->setText('Twitter');
     $source->setTitle($title);
     $entry->setSource($source);
     $entry->setLang($data['lang']);
     $entry->setExtra('filter_level', $data['filter_level']);
     $this->objectManager->persist($entry);
     return ConsumerInterface::MSG_ACK;
 }
 /**
  * {@inheritdoc}
  */
 public function execute(AMQPMessage $msg)
 {
     /* @var $message Message */
     $message = $msg->getMessage();
     $serializer = $this->serializer;
     $content = $message->getValue('content');
     $xml = new \SimpleXMLElement($content);
     /** @var \Doctrine\Common\Persistence\ObjectRepository $repository */
     $repository = $this->objectManager->getRepository($this->atomEntryClass);
     try {
         /** @var \Bangpound\Bundle\PubsubBundle\CouchDocument\AtomFeed $feed */
         $feed = $serializer->deserialize($content, 'Bangpound\\Bundle\\PubsubBundle\\CouchDocument\\AtomFeed', 'xml');
         $source = new SourceType();
         $source->setAuthors($feed->getAuthors());
         $source->setBase($feed->getBase());
         $source->setCategories($feed->getCategories());
         $source->setContributors($feed->getContributors());
         $source->setGenerator($feed->getGenerator());
         $source->setIcon($feed->getIcon());
         $source->setLang($feed->getLang());
         $source->setLogo($feed->getLogo());
         $source->setLinks($feed->getLinks());
         $source->setRights($feed->getRights());
         $source->setSubtitle($feed->getSubtitle());
         $source->setTitle($feed->getTitle());
         $source->setUpdated($feed->getUpdated());
         $execute = FALSE;
         /** @var \Bangpound\Bundle\PubsubBundle\CouchDocument\AtomEntry $entry */
         foreach ($feed->getEntries() as $key => $entry) {
             $id = $entry->getId();
             $existing = $repository->findOneBy(['id' => $id]);
             if ($existing) {
                 $this->logger->info(sprintf('Duplicate notification sent for %s - %s', $id, $entry->getTitle()), ['existing' => $existing, 'new' => $entry]);
                 continue;
             }
             $execute = TRUE;
             if (!$entry->getSource()) {
                 $entry->setSource(clone $source);
             }
             $entry->setOriginalData($xml->entry[$key]->asXml(), 'text/xml');
             $this->objectManager->persist($entry);
         }
         if ($execute) {
             $this->objectManager->flush();
         }
         $this->objectManager->clear();
     } catch (RuntimeException $e) {
         throw $e;
     }
 }