質問編集履歴
2
追加情報
test
CHANGED
File without changes
|
test
CHANGED
@@ -30,3 +30,99 @@
|
|
30
30
|
|
31
31
|
不足情報などございましたらご指摘いただけますと幸いです。
|
32
32
|
よろしくお願いします。
|
33
|
+
|
34
|
+
|
35
|
+
### 追記
|
36
|
+
実際のコードはこちらです。
|
37
|
+
```php
|
38
|
+
<?php
|
39
|
+
|
40
|
+
// 読みこむXML
|
41
|
+
$xml = "./blog.xml";
|
42
|
+
$imgBasePath = 'https://images.microcms-assets.io/bar/';
|
43
|
+
$xmlData = simplexml_load_file($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
|
44
|
+
|
45
|
+
$url = 'エンドポイント';
|
46
|
+
$headers = array(
|
47
|
+
'Content-Type: application/json',
|
48
|
+
'X-MICROCMS-API-KEY: XXXXXXXXXX'
|
49
|
+
);
|
50
|
+
|
51
|
+
foreach ($xmlData->channel->item as $entry) {
|
52
|
+
|
53
|
+
// カテゴリの設定
|
54
|
+
$cateArray = [];
|
55
|
+
$categories = json_decode(json_encode($entry->category), true);
|
56
|
+
|
57
|
+
foreach ($categories as $category) {
|
58
|
+
if (is_array($category)) continue;
|
59
|
+
|
60
|
+
switch($category) {
|
61
|
+
case 'event':
|
62
|
+
$cateArray[] = 'event';
|
63
|
+
break;
|
64
|
+
case 'notice':
|
65
|
+
$cateArray[] = 'notice';
|
66
|
+
break;
|
67
|
+
case 'blog':
|
68
|
+
$cateArray[] = 'blog';
|
69
|
+
break;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
// コンテンツ取得
|
74
|
+
$contents = trim(strval($entry->children('content', true)->encoded));
|
75
|
+
|
76
|
+
preg_match_all('/src="https:\/\/hoge\.com\/wp-content\/uploads\/(.*)(png|jpg|jpeg|gif)/i', $contents, $matches);
|
77
|
+
|
78
|
+
// 置き換え用の配列を作成
|
79
|
+
$pattern = [];
|
80
|
+
$replace = [];
|
81
|
+
foreach ($matches[0] as $key => $match) {
|
82
|
+
$pattern[] = '/' . preg_replace('/\//', '\/', $match) . '/';
|
83
|
+
$pathArray = explode('/', $match);
|
84
|
+
$paths = array_reverse($pathArray);
|
85
|
+
$replace[] = 'src="' . $imgBasePath . "{$paths[2]}_{$paths[1]}_{$paths[0]}";
|
86
|
+
}
|
87
|
+
|
88
|
+
// 置き換え実行
|
89
|
+
$html_content = preg_replace($pattern, $replace, $contents);
|
90
|
+
|
91
|
+
// 送信用のデータ作成
|
92
|
+
$data = [
|
93
|
+
'id' => '000' . strval($entry->children('wp', true)->post_id),
|
94
|
+
'title' => trim(strval($entry->title)),
|
95
|
+
'category' => array_unique($cateArray),
|
96
|
+
'html_contents' => $html_content,
|
97
|
+
'is_html' => true,
|
98
|
+
'is_migration' => true
|
99
|
+
];
|
100
|
+
|
101
|
+
// curlでPOSTする
|
102
|
+
$ch = curl_init();
|
103
|
+
curl_setopt($ch, CURLOPT_URL, $url);
|
104
|
+
curl_setopt($ch, CURLOPT_POST, TRUE);
|
105
|
+
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
106
|
+
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
107
|
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
108
|
+
$html = curl_exec($ch);
|
109
|
+
|
110
|
+
// curlでエラー
|
111
|
+
if(curl_errno($ch)){
|
112
|
+
$CURLERR .= 'curl_errno:' . curl_errno($ch) . "\n";
|
113
|
+
$CURLERR .= 'curl_error:' . curl_error($ch) . "\n";
|
114
|
+
$CURLERR .= '▼curl_getinfo' . "\n";
|
115
|
+
foreach(curl_getinfo($ch) as $key => $val){
|
116
|
+
$CURLERR .= '■' . $key . ':' . $val . "\n";
|
117
|
+
}
|
118
|
+
echo nl2br($CURLERR);
|
119
|
+
}
|
120
|
+
|
121
|
+
curl_close($ch);
|
122
|
+
|
123
|
+
|
124
|
+
echo $data['id'] . ':' . $html . "\n";
|
125
|
+
```
|
126
|
+
|
127
|
+
■管理画面での設定
|
128
|
+
APIキー管理ページから設定できる「デフォルト権限」と「対象API」では、GET・POSTにチェックがついている状態です。
|
1
説明不足
test
CHANGED
File without changes
|
test
CHANGED
@@ -12,18 +12,20 @@
|
|
12
12
|
```
|
13
13
|
と、記事の数だけ返ってきてしまいました。
|
14
14
|
|
15
|
-
PHPはおろか、APIを叩くことにも慣れていませんので、どのようなエラーなのか
|
15
|
+
PHPはおろか、APIを叩くことにも慣れていませんので、どのようなエラーなのかいまいちイメージが出来ていないのですが、
|
16
|
-
こちらは
|
16
|
+
こちらはPOSTを拒否されているということなのでしょうか...?
|
17
|
+
だとすると、デフォルト権限でPOSTを許可としているのに何故拒否されているのでしょうか?
|
17
18
|
|
18
19
|
|
19
20
|
### やってみたこと
|
20
21
|
・microCMSのAPIスキーマなどの設定は[参考記事](https://zenn.dev/kandai/articles/f6a034d166e4c977a78e)の内容と全く同じように設定しました。
|
21
22
|
・しかし、取得したAPI KEYを記述する所の「X-WRITE-API-KEY」は、「X-MICROCMS-API-KEY」に変更しています(X-MICROCMS-API-KEYに統一されたようです)
|
22
|
-
・microCMS管理画面からデフォルト権限のGET、POSTにチェックがついているかどうかの確認
|
23
|
+
・microCMS管理画面からデフォルト権限のGET、POSTにチェックがついているかどうかの再確認
|
23
24
|
・↑念の為、個別権限も同じように設定しました
|
24
25
|
・var_dumpで記事のデータが$dataの配列の通りに取得されているかどうかの確認(されていました)
|
25
26
|
・xmlのサイズを小さくして実行 [参考](https://document.microcms.io/manual/limitations)
|
26
27
|
・一度に何度も実行してしまったので、時間を5時間ほど置いてから再度実行
|
28
|
+
microCMSのプランは無料プランです。
|
27
29
|
|
28
30
|
|
29
31
|
不足情報などございましたらご指摘いただけますと幸いです。
|