TL;DR
この記事は、Qiita API v2 の記事作成APIを使用して作成し、この記事の最後に、この記事自体を作成するコードを記載しています。
はじめに
APIを使用して投稿した記事に、実際に投稿に使用したコードを記載したいと思いましたが、
下記のようにコードを直接記載すると、APIを使用するコード部分が再帰的になり、記載ができませんでした。
item_create_request({
title: 'hogehoge',
body: `
# JavaScriptでHelloWorld
\`\`\`
console.log('HelloWorld');
\`\`\`
# 使用したコード
\`\`\` javascript
item_create_request({
title: 'hogehoge',
body: \`
# JavaScriptでHelloWorld
\\\`\\\`\\\`
console.log('HelloWorld');
\\\`\\\`\\\`
# 使用したコード
(困った。個々の部分が再帰的になってしまい記載できない。)
\`\`\`
`
})
つまり、**クワイン(プログラミング)**のような工夫が必要です。
この記事では、JavaScriptの関数はtoStringでソースコードの文字列を取得できることを利用して実現しました。
以下にNode.jsでのコード例を示します。
const authorization_token = 'Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd';
const thisCode = (authorization_token) => {
const item_title = '記事タイトル';
const item_tags = [
{ name: 'タグ1' },
{ name: 'タグ2' },
];
const item_body = `
★★ここに、記事本文を記載する★★
\`\`\` javascript:myCode.js
const authorization_token = 'Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd';
const thisCode = ${thisCode.toString()}
thisCode(authorization_token);
\`\`\`
`;
const request = require('request');
request(
{
url: 'https://qiita.com/api/v2/items',
method: 'POST',
headers: { Authorization: authorization_token, 'Content-Type': 'application/json' },
json: {
private: false,
title: item_title,
tags: item_tags,
body: item_body,
},
},
(error, response, body) => console.log(error ? 'request fail' : 'request success')
);
}
thisCode(authorization_token);
注意点
自身のAuthorizationのtokenを記事で晒すのは大変危険です。
上記コード例の先頭の「authorization_token」は実際は自身のtokenを記載して下さい(authorization_tokenは実際のコードと異なります)
2番目(コードエリアのauthorization_token)はもちろんダミーのままにして下さい
試すときのポイント
上記のコード例の、requestのjsonのprivateをtrueにすると、限定共有記事となり、気軽に試すことができます。
本記事もマークダウンでの表示を確認するために限定共有での投稿/削除を繰り返しました。
その他
evalを使った例や、他の言語の例もあると、Qiita APIの参考になるかも。
ちなみに、自動更新(記事更新)の例は自身のこちらの記事に載せてます。
この記事のAPIを実行したコード
\エスケープ地獄
const authorization_token = 'Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd';
const thisCode = (authorization_token) => {
const item_title = 'Qiita APIでクワイン投稿(Node.js)';
const item_tags = [
{ name: 'QiitaAPI' },
{ name: 'Node.js' },
{ name: 'JavaScript' },
{ name: 'quine' },
{ name: 'Quine投稿' },
];
const item_body = `
# TL;DR
**この記事は、[Qiita API v2 の記事作成API](https://qiita.com/api/v2/docs#post-apiv2items)を使用して作成し、[この記事の最後](#この記事のapiを実行したコード)に、この記事自体を作成するコードを記載しています。**
# はじめに
APIを使用して投稿した記事に、**実際に投稿に使用したコード**を記載したいと思いましたが、
下記のようにコードを直接記載すると、**APIを使用するコード部分が再帰的になり**、記載ができませんでした。
\`\`\` javascript
item_create_request({
title: 'hogehoge',
body: \`
# JavaScriptでHelloWorld
\\\`\\\`\\\`
console.log('HelloWorld');
\\\`\\\`\\\`
# 使用したコード
\\\`\\\`\\\` javascript
item_create_request({
title: 'hogehoge',
body: \\\`
# JavaScriptでHelloWorld
\\\\\\\`\\\\\\\`\\\\\\\`
console.log('HelloWorld');
\\\\\\\`\\\\\\\`\\\\\\\`
# 使用したコード
(困った。個々の部分が再帰的になってしまい記載できない。)
\\\`\\\`\\\`
\`
})
\`\`\`
つまり、**[クワイン(プログラミング)](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AF%E3%82%A4%E3%83%B3_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0))**のような工夫が必要です。
この記事では、**JavaScriptの関数はtoStringでソースコードの文字列を取得できる**ことを利用して実現しました。
以下にNode.jsでのコード例を示します。
\`\`\` javascript
const authorization_token = 'Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd';
const thisCode = (authorization_token) => {
const item_title = '記事タイトル';
const item_tags = [
{ name: 'タグ1' },
{ name: 'タグ2' },
];
const item_body = \`
★★ここに、記事本文を記載する★★
\\\`\\\`\\\` javascript:myCode.js
const authorization_token = 'Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd';
const thisCode = \${thisCode.toString()}
thisCode(authorization_token);
\\\`\\\`\\\`
\`;
const request = require('request');
request(
{
url: 'https://qiita.com/api/v2/items',
method: 'POST',
headers: { Authorization: authorization_token, 'Content-Type': 'application/json' },
json: {
private: false,
title: item_title,
tags: item_tags,
body: item_body,
},
},
(error, response, body) => console.log(error ? 'request fail' : 'request success')
);
}
thisCode(authorization_token);
\`\`\`
# 注意点
自身の**Authorizationのtokenを記事で晒すのは大変危険**です。
上記コード例の先頭の「authorization_token」は実際は自身のtokenを記載して下さい(authorization_tokenは実際のコードと異なります)
2番目(コードエリアのauthorization_token)はもちろんダミーのままにして下さい
# 試すときのポイント
上記のコード例の、requestのjsonのprivateをtrueにすると、限定共有記事となり、気軽に試すことができます。
~~本記事もマークダウンでの表示を確認するために限定共有での投稿/削除を繰り返しました。~~
# その他
evalを使った例や、他の言語の例もあると、Qiita APIの参考になるかも。
ちなみに、自動更新(記事更新)の例は自身の[こちらの記事](https://qiita.com/j5c8k6m8/items/1f23349c2521d916ed1a)に載せてます。
# この記事のAPIを実行したコード
~~\\エスケープ地獄~~
\`\`\` javascript:myCode.js
const authorization_token = 'Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd';
const thisCode = ${thisCode.toString()}
thisCode(authorization_token);
\`\`\`
`;
const request = require('request');
request(
{
url: 'https://qiita.com/api/v2/items',
method: 'POST',
headers: { Authorization: authorization_token, 'Content-Type': 'application/json' },
json: {
private: false,
title: item_title,
tags: item_tags,
body: item_body,
},
},
(error, response, body) => console.log(error ? 'request fail' : 'request success')
);
}
thisCode(authorization_token);