0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Qiita APIでQuine投稿(Python)

Posted at

Quine投稿については こちら

exec を使用して、文字列としてquineのコードを書く際のエスケープに、非常に苦労しました。
記事中のコードではダブルクォーテーションと、バッククォートをUnicodeエスケープしています。
より、スマートな方法があれば、是非コメントで教えてください。

[ バージョン情報(sys.version) ]
3.8.2 (default, Apr 23 2020, 14:22:33)
[GCC 8.3.0]

この記事のAPIを実行したコード

quineRequest.py
authorization_token = 'Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdi'
z="\\"
escape_def_code = """
def escape(s):
	return s.replace(\u0022'\u0022, z + 'u0027').replace('\u0022', z * 2 + 'u0022').replace('\u0060', z * 2 + 'u0060')
"""
exec_code = """
import sys
import requests
import json
url = 'https://qiita.com/api/v2/items'
headers = {{
    'Authorization': '{0}',
    'Content-Type': 'application/json'
}}
title = 'Qiita APIでQuine投稿(Python)'
body = '''
Quine投稿については **[こちら](https://qiita.com/j5c8k6m8/items/bc2324ef036729da1a28)**

\u0060exec\u0060 を使用して、文字列としてquineのコードを書く際のエスケープに、非常に苦労しました。
記事中のコードではダブルクォーテーションと、バッククォートをUnicodeエスケープしています。
より、スマートな方法があれば、是非コメントで教えてください。

[ バージョン情報(\u0060sys.version\u0060) ]
**'''
body += sys.version
body += '''**

# この記事のAPIを実行したコード

\u0060\u0060\u0060 python:quineRequest.py
authorization_token = 'Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdi'
'''
body += ('z=\u0022' + (z * 2) + '\u0022')
body += '''
escape_def_code = \u0022\u0022\u0022{1}\u0022\u0022\u0022
exec_code = \u0022\u0022\u0022{2}\u0022\u0022\u0022
exec_exec_code = \u0022\u0022\u0022{3}\u0022\u0022\u0022
{3}
\u0060\u0060\u0060
'''

tag = [{{'name': 'Qiita'}}, {{'name': 'Python'}}, {{'name': 'quine'}}, {{'name': 'QiitaAPI'}}, {{'name': 'quine投稿'}}]
post_data = {{
    'private': False,
    'body': body,
    'title': title,
    'tags': tag,
}}
r = requests.post(url, headers=headers, data=json.dumps(post_data))
"""
exec_exec_code = """
exec(escape_def_code)
exec(exec_code.format(authorization_token, escape(escape_def_code), escape(exec_code), escape(exec_exec_code)))
"""

exec(escape_def_code)
exec(exec_code.format(authorization_token, escape(escape_def_code), escape(exec_code), escape(exec_exec_code)))

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?