質問編集履歴

2

追加情報

2023/03/13 02:44

投稿

yubi0908
yubi0908

スコア1

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

説明不足

2023/03/12 08:50

投稿

yubi0908
yubi0908

スコア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
  不足情報などございましたらご指摘いただけますと幸いです。