SurveyMonkey VS LimeSurvey

こんにちは！ねぎし(@nnegishi2)です。本日はアンケート調査のウェブアプリについて解説します。

アンケートにSurveyMonkeyを使うすんぜんまでいったのですが・・・
-------------------------------------

弊社では顧客のアンケートなどに使うアンケートサービスについて調べていました。 その結果世界シェア1位のSurveyMonkeyを使う寸前までいったのですが 独自のページでAPIを経由してアンケート結果を取得したいという要件において SurveyMonkeyで実現しようとするとコストがかかりさらにアンケート内容を 送信するAPIがみつからなかったのでlimeSurveyを使いました。結果とってもハッピーに要件を満たすことができました。

弊社での要件は以下のようなものでした。
-------------------

*   自分たちのホームページの中にアンケートを埋め込みたい
*   アンケート結果を自分たちのホームページから送信したい
*   アンケートの設問を切り出してほかで使用したい
*   アンケートを管理したい
*   コストはあまりかけたくない(稟議が大変なので)

LimeSurveyにはJSON-RPCというモジュールに対応していて APIのような使い方ができます。 LimeSurveyは以下の画像をクリックしてダウンロードできます！ぜひ導入してみてください！

 [![](https://microlearning.site/imgs/limesurvey_stable.jpeg) ](https://www.limesurvey.org/stable-release) 

[**導入される際はこちらのクラウドがオススメです！月＄2.5でSSD20GBと大変使いやすいです**](https://www.vultr.com/?ref=7296351)

以下がLimeSurveyでJSON-RPCをやるやり方です。
---------

*   1.LimeSurveyの管理コンソールでJSON-RPCでの通信を有効化する
*   2.ユーザー名やパスワードとからセッションキーを取得する
*   3.調査IDを取得する
*   4.調査IDに紐つく調査項目を取得する
*   5.調査内容を送信する

以下に詳しく説明させていただきます。

1.LimeSurveyの管理コンソールでJSON-RPCでの通信を有効化する
=======================================

管理画面でJSONRPCを有効化します 

![](https://microlearning.site/imgs/json-rpc.jpeg) 

JSON-RPCをComposerでインストールしておくこともお忘れずに！ 

```php
php composer require weberhofer/jsonrpcphp
```

2.ユーザー名やパスワードとからセッションキーを取得する
============================

以下がAPIに通信するコードになります(composer installで作ったauto_load.phpを含めることを忘れずに！) 

```php
<?php

include_once 'third_party/autoload.php';

define( 'LS_BASEURL', <LimeSurveyのアドレス>);  // adjust this one to your actual LimeSurvey URL
define( 'LS_USER', <ユーザー名> );
define( 'LS_PASSWORD', <パスワード> );

// the survey to process
$survey_id=<調査のID>;

// instantiate a new client
$myJSONRPCClient = new \org\jsonrpcphp\JsonRPCClient( LS_BASEURL.'admin/remotecontrol' );

// receive session key
$sessionKey= $myJSONRPCClient->get_session_key( LS_USER, LS_PASSWORD );
?>
```

3.調査IDを取得する
===========

以下がAPIに通信するコードになります(先ほどのコードの下に追記ください)

```php
$groups = $myJSONRPCClient->list_surveys( $sessionKey );
```


4.調査IDに紐つく調査項目を取得する
===================
以下がAPIに通信するコードになります(先ほどのコードの下に追記ください)

```php
$group2 = $myJSONRPCClient->list_questions($sessionKey,<【３】で取得したID>,null,null);
```


*   5.調査内容を送信する
以下がAPIに通信するコードになります (私の場合は自分のLimeSurvey調査のページの送信内容をjQueryの$.serializeで取得したものを実験的に使っています)

```php
$str = "YII_CSRF_TOKEN=Mzg3bnJTVGhTa3JNS2lSbXNDblRUYnpZVmkzYm1CbUvmLY5Bfy5n9zvqaSnQUqxVsilQURgtpeTSRYauq8990g%3D%3D&fieldnames=299561X2X2%7C299561X2X2comment%7C299561X2X3%7C299561X2X3comment%7C299561X2X4%7C299561X2X4comment%7C299561X2X5%7C299561X2X5comment%7C299561X2X6%7C299561X2X6comment%7C299561X2X7%7C299561X2X7comment&thisstep=1&sid=299561&start_time=1533534027&LEMpostKey=581106912&relevance2=1&relevance3=1&relevance4=1&relevance5=1&relevance6=1&relevance7=1&relevanceG0=1&299561X2X2=A3&299561X2X2comment=&299561X2X3=A2&299561X2X3comment=&299561X2X4=A1&299561X2X4comment=&299561X2X5=A1&299561X2X5comment=&299561X2X6=A1&299561X2X6comment=&299561X2X7=A1&299561X2X7comment=&lastgroup=299561X2&ajax=on&ajax=on&move=movesubmit&move=movesubmit&move=movesubmit";

$arr = explode('&',$str);
$post = array();
foreach($arr as $each){
  $kv = explode('=',$each);
  if(count($kv) > 1){
      $post[$kv[0]] = $kv[1];
  }
}

//submit survey response data
$groups = $myJSONRPCClient->add_response($sessionKey, $survey_id, $post);
var_dump($groups);
```

SurveyMonkeyは無料でもある程度できますがAPI通信だと有料プランに入らないとだいぶ制限があります。 

![](https://microlearning.site/imgs/surveymonkey.jpeg) 

アンケート調査って結構使いますのでいろんなオプションを知り要件に応じて柔軟に使い分けていきたいですね。 

[ブログも細々とやってます！](http://shinnegishi1986.hatenablog.com/) 

ブログではそこらへんも詳しく解説していますのでご一読いただけると嬉しいです。 ご一読ありがとうございます！