# Blog Beiträge Importieren über REST API

**URL:** https://forum.shopware.com/t/blog-beitrage-importieren-uber-rest-api/47295
**Category:** Programmierung
**Created:** [3. August 2017 um 15:35 UTC](https://forum.shopware.com/t/blog-beitrage-importieren-uber-rest-api/47295 "2017-08-03T15:35:20Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![mSengera](https://avatars.discourse-cdn.com/v4/letter/m/cdc98d/32.png) [@mSengera](https://forum.shopware.com/u/mSengera)
#### Post date: [3. August 2017 um 15:35 UTC](https://forum.shopware.com/t/blog-beitrage-importieren-uber-rest-api/47295/1 "2017-08-03T15:35:20Z")

</div>

Hallo zusammen 🙂

Ist es möglich über die REST API Blogbeiträge zu importieren?

Ich habe in der Doku ([REST API - Models](https://developers.shopware.com/developers-guide/rest-api/models/)) kein passendes Model finden können…

Hat das schonmal wer gemacht oder einen guten Rat für mich?

Liebe Grüße

---

<div class="post-metadata">

### Author: ![Moritz\_Naczenski](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/moritz_naczenski/32/7792_2.png) [@Moritz\_Naczenski](https://forum.shopware.com/u/Moritz_Naczenski)
#### Post date: [3. August 2017 um 15:53 UTC](https://forum.shopware.com/t/blog-beitrage-importieren-uber-rest-api/47295/2 "2017-08-03T15:53:29Z")

</div>

Dafür müsstest du dir eine eigene API-Resource schreiben, im Standard ist das nicht voresehen.

---

<div class="post-metadata">

### Author: ![mSengera](https://avatars.discourse-cdn.com/v4/letter/m/cdc98d/32.png) [@mSengera](https://forum.shopware.com/u/mSengera)
#### Post date: [3. August 2017 um 16:24 UTC](https://forum.shopware.com/t/blog-beitrage-importieren-uber-rest-api/47295/3 "2017-08-03T16:24:51Z")

</div>

Danke für deine Antwort!

Gibt es eine andere relativ simple Lösung, Blogbeiträge programmiertechnisch ins System zu bekommen?  
Dies muss nicht zwingend über die REST API laufen.

---

<div class="post-metadata">

### Author: ![ppp](https://avatars.discourse-cdn.com/v4/letter/p/9de0a6/32.png) [@ppp](https://forum.shopware.com/u/ppp)
#### Post date: [23. Oktober 2017 um 13:01 UTC](https://forum.shopware.com/t/blog-beitrage-importieren-uber-rest-api/47295/4 "2017-10-23T13:01:43Z")

</div>

schließe mich der Frage an, hätte Intersse an einem Plugin / Script für den Import von Blogeinträgen in Shopware.

---

<div class="post-metadata">

### Author: ![PStadtfeld](https://avatars.discourse-cdn.com/v4/letter/p/3bc359/32.png) [@PStadtfeld](https://forum.shopware.com/u/PStadtfeld)
#### Post date: [25. Oktober 2017 um 06:30 UTC](https://forum.shopware.com/t/blog-beitrage-importieren-uber-rest-api/47295/5 "2017-10-25T06:30:53Z")

</div>

Das Schreiben einer eigenen Api ist nicht allzu schwer, wenn du darauf verzichten möchtest, dann musst du dir ein Script schreiben, welches die Blogeinträge direkt inklusive aller richtigen Abhängigkeiten und ohne Umwege direkt in die Datenbank von Shopware schreibt, bzw. aus dieser löscht.

Sprich:

$connect = mysqli\_connect($host,$user,$pass,$db\_name);&nbsp;&nbsp;

mysqli\_query("INSERT INTO s\_blogs(?) (Wert1, Wert2, Wert3…) VALUES (Var1, Var2, Var3) …

&nbsp;

Soweit ich das gesehen habe plant Shopware aber auch in einer der kommenden Versionen die Api um alle Backend-Funktionalitäten zu erweitern, spätestens dann sollte es klappen.

Bis dahin versuchs mal hiermit, habe ich mal schnell zusammengeworfen:

```
Ordnerstruktur

HyoBlogApi
 - Components
   - Api
     - Resource
       - Blog.php
 - Controllers
   - Api
     - Blog.php
 - HyoBlogApi.php
 - plugin.xml

```

&nbsp;

**HyoBlogApi.php**

```
 'onGetBlogApiController',
            'Enlight_Controller_Front_StartDispatch' => 'onEnlightControllerFrontStartBlog'
        ];
    }

    /**
     * @return string
     */
    public function onGetBlogApiController()
    {
        return $this->getPath() . '/Controllers/Api/Blog.php';
    }

    /**
     *
     */
    public function onEnlightControllerFrontStartBlog()
    {
        $this->container->get('loader')->registerNamespace('Shopware\Components', $this->getPath() . '/Components/');
    }
}

```

**plugin.xml**

```
    Blog Rest Api Erweiterung
    Blog Rest Api Extension

    1.0
    PStadtfeld
    PStadtfeld
    proprietary
    

    
        Veröffentlichung
        Release

```

**Ressource-\>Blog.php**

```
getManager()->getRepository(BlogModel::class);
    }

    /**
     * Create new Blog
     *
     * @param array $params
     * @return BlogModel
     * @throws ApiException\ValidationException
     */
    public function create(array $params)
    {
        /** @var BlogModel $blog*/
        $blog = new BlogModel();

        $blog->fromArray($params);

        $violations = $this->getManager()->validate($blog);

        /**
         * Handle Violation Errors
         */
        if ($violations->count() > 0) {
            throw new ApiException\ValidationException($violations);
        }

        $this->getManager()->persist($blog);
        $this->flush();

        return $blog;
    }

    /**
     * @param int $offset
     * @param int $limit
     * @param array $criteria
     * @param array $orderBy
     * @return array
     */
    public function getList($offset = 0, $limit = 25, array $criteria = [], array $orderBy = [])
    {

// ->leftJoin('d.multiShop', 'm')
        //->addSelect('m')
        $builder = $this->getRepository()->createQueryBuilder('blog');
        $builder->select(['blog', 'tags', 'author', 'media', 'mappingMedia', 'assignedArticles', 'assignedArticlesDetail', 'attribute', 'comments'])
            ->leftJoin('blog.tags', 'tags')
            ->leftJoin('blog.author', 'author')
            ->leftJoin('blog.assignedArticles', 'assignedArticles')
            ->leftJoin('assignedArticles.mainDetail', 'assignedArticlesDetail')
            ->leftJoin('blog.media', 'mappingMedia')
            ->leftJoin('blog.attribute', 'attribute')
            ->leftJoin('blog.comments', 'comments', \Doctrine\ORM\Query\Expr\Join::WITH, 'comments.active = 1')
            ->leftJoin('mappingMedia.media', 'media')
            ->addOrderBy('comments.creationDate', 'ASC');

        $query = $builder->getQuery();
        $query->setHydrationMode($this->resultMode);

        $paginator = $this->getManager()->createPaginator($query);

        //returns the total count of the query
        $totalResult = $paginator->count();

        //returns the Dispatch data
        $dispatch = $paginator->getIterator()->getArrayCopy();

        return ['data' => $dispatch, 'total' => $totalResult];
    }

    /**
     * Get One Dispatch Information
     *
     * @param $id
     * @return mixed
     * @throws ApiException\NotFoundException
     * @throws ApiException\ParameterMissingException
     */
    public function getOne($id)
    {
        $this->checkPrivilege('read');

        if (empty($id)) {
            throw new ApiException\ParameterMissingException();
        }

        $builder = $this->getRepository()->createQueryBuilder('blog');
        $builder->select(['blog', 'tags', 'author', 'media', 'mappingMedia', 'assignedArticles', 'assignedArticlesDetail', 'attribute', 'comments'])
            ->leftJoin('blog.tags', 'tags')
            ->leftJoin('blog.author', 'author')
            ->leftJoin('blog.assignedArticles', 'assignedArticles')
            ->leftJoin('assignedArticles.mainDetail', 'assignedArticlesDetail')
            ->leftJoin('blog.media', 'mappingMedia')
            ->leftJoin('blog.attribute', 'attribute')
            ->leftJoin('blog.comments', 'comments', \Doctrine\ORM\Query\Expr\Join::WITH, 'comments.active = 1')
            ->leftJoin('mappingMedia.media', 'media')
            ->addOrderBy('comments.creationDate', 'ASC')
            ->where('blog.id = ?1')
            ->setParameter(1, $id);

        /** @var DispatchModel $blog */
        $blog = $builder->getQuery()->getOneOrNullResult($this->getResultMode());

        if (!$blog) {
            throw new ApiException\NotFoundException("Blog by id $id not found");
        }

        return $blog;
    }
}

```

**Controller-\>Api-\>Blog.php**

```
resource = \Shopware\Components\Api\Manager::getResource('Blog');
    }

    /**
     * GET Request on /api/Dispatch
     */
    public function indexAction()
    {
        $limit = $this->Request()->getParam('limit', 1000);
        $offset = $this->Request()->getParam('start', 0);
        $sort = $this->Request()->getParam('sort', []);
        $filter = $this->Request()->getParam('filter', []);

        $result = $this->resource->getList($offset, $limit, $filter, $sort);

        $this->View()->assign(['success' => true, 'data' => $result]);
    }

    /**
     * Get one Dispatch
     *
     * GET /api/Dispatch/{id}
     */
    public function getAction()
    {
        $id = $this->Request()->getParam('id');
        /** @var \Shopware\Models\Dispatcher\Dispatcher $dispatch */
        $dispatch = $this->resource->getOne($id);

        $this->View()->assign(['success' => true, 'data' => $dispatch]);
    }

}

```

&nbsp;

**ACHTUNG!**

Die Api-Erweiterung verfügt so derzeit nur über Getter, um auch Einträge hinzufügen zu können, musst du die Setter-Methoden in der Ressource-\>Blog.php ergänzen. Da kann ich mich zeitlich momentan nicht durchwurschteln, sorry 😉
