GWだからプログラミングしてる ID:jGvSXJ+5

1以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:05:56.30 ID:jGvSXJ+5

UnicodeEncodeError: 'ascii' codec can't encode characters in position 105-246: ordinal not in range(128)

積んだ

2以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:10:49.81 ID:jGvSXJ+5

とりあえず入力した文字の後ろに.encode(encording="utf-8")と入れたらおとなしくなった
でも
URLに日本語を入れたいのにutf-8にしたら文字化けするよね
ダメですわね

3以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:12:08.93 ID:jGvSXJ+5

sentence = "GWだけどずっとプログラミングしてる。今日はずっとこれだけしたい。"

url=(pageurl+"?appid="+appid+"&sentence="+sentence).encode(encoding='utf-8')
print(url)

with urllib.request.urlopen(url) as fin:
body = fin.read()

4以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:13:54.47 ID:jGvSXJ+5

GWだけどずっとプログラミングしてる。今日はずっとこれだけしたい。

GW\xe3\x81\xa0\xe3\x81\x91\xe3\x81\xa9\xe3\x81\x9a\xe3\x81\xa3\xe3\x81\xa8\xe3\x83\x97\xe3\x83\xad\xe3\x82\xb0\xe3\x83\xa9\xe3\x83\x9f\xe3\x83\xb3\xe3\x82\xb0\xe3\x81\x97\xe3\x81\xa6\xe3\x82\x8b\xe3\x80\x82\xe4\xbb\x8a\xe6\x97\xa5\xe3\x81\xaf\xe3\x81\x9a\xe3\x81\xa3\xe3\x81\xa8\xe3\x81\x93\xe3\x82\x8c\xe3\x81\xa0\xe3\x81\x91\xe3\x81\x97\xe3\x81\x9f\xe3\x81\x84\xe3\x80\x82

エンコードする理由やエンコードして何が得られるのか、どう言うエンコードをすればいいのかが分かってない
知り方もわからん

5以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:17:22.91 ID:jGvSXJ+5

urllib 日本語URL
で検索をかけるとそれっぽい答えが出て来た
なるほど、urllib.requestじゃなくてもうrequests使えって話ね
しね!!!!!!!!!!

6以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:21:26.13 ID:jGvSXJ+5

url=(pageurl+"?appid="+appid+"&sentence="+sentence).encode(encoding='utf-8')
print(url)

with requests.get(url) as fin:
body = fin.text


はああああああ
便利ですねrequests、人間のために作られてるって感じ感動

7以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:28:41.94 ID:jGvSXJ+5

<?xml version="1.0" encoding="UTF-8"?>
<ResultSet xmlns="urn:yahoo:jp:jlp:KeyphraseService" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:yahoo:jp:jlp:KeyphraseService https://jlp.yahooapis.jp/KeyphraseService/V1/extract.xsd">
<Result>
<Keyphrase>晴れ</Keyphrase>
<Score>100</Score>
</Result>
<Result>
<Keyphrase>いい天気</Keyphrase>
<Score>87</Score>
</Result>
</ResultSet>

整形したいわ!

8以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:33:43.36 ID:jGvSXJ+5

XMLの解析... ElementTree!
ElementTree!使うわよ!

9以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:39:39.42 ID:jGvSXJ+5

urllib使ってないからElementTreeうまく動かなかった
侍エンジニアブログはクソ

12以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 18:20:17.70 ID:jGvSXJ+5

使ったのはこれ
https://developer.yahoo.co.jp/webapi/jlp/keyphrase/v1/extract.html
URLの末尾に&output=つけてjsonだの、xmlだのつければ色々変えれるっぽい
jsonにしたら1行しか出ないし、utf-8なのか日本語が文字化けしてて読めなかったから諦めた
htmlを解析するみたいにbeautifulsoup使ってやったよ

15以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:32:03.38 ID:jGvSXJ+5

言語解析してた
sentence = "おはようございます。今日はとてもいい天気ですね。明日は晴れです。"
って書いたら
>>7が出てくるようになってて
その中からKeyphraseに書かれている中身だけを取って来てたの
xmlなら、いちいちxmlで表示させて、bs4のhtmlパーサー使って、find_allしてkeyphraseだけ取って、forループ使って中のテキストを抽出...
とか言う長ったらしいデータのやりとりが必要になる

16以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:33:20.01 ID:jGvSXJ+5

ちょっとググってたけど変数のなかに入れてしまった日本語のエンコードやデコードの記事ってないんだね
どれも'文字列'.encode('文字コード名')とかb'バイト列'.decode('文字コード名')で、変数使えない前提みたいな書き方してんの

18以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:37:56.42 ID:jGvSXJ+5

for i in words:
shift = i.encode("shift-jis")
一応これでエンコードはできるけど、デコードは
for i in shift:
utf = b.i.decode("utf-8")
とかできない

19以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:40:01.58 ID:jGvSXJ+5

>>17
あっ...!あっ...!

21以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:44:26.65 ID:jGvSXJ+5

ちょっと待って
{'晴れ': 100, 'いい天気': 87}
って出すことできたけど、右の文字だけをとりあえず出して見ないことには始まらない
今の方法なら、text =['晴れ','いい天気']ってなってるよ
だからfor文で取り出してエンコードはしてる

22以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:50:23.59 ID:jGvSXJ+5

json = json.loads(body)
print(json)
words=[]
for jsonwords,jsonscore in json.items():
words.append(jsonwords)

できました!

23以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:57:39.02 ID:jGvSXJ+5

b'\x82\xa2\x82\xa2\x93V\x8bC'
って出たからデコードする場合はこれをしなきゃいけないのね

24以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:01:39.81 ID:jGvSXJ+5

shift-jisでエンコードしたものはshift-jisでデコードしなきゃいけないのか
初めて知った

25以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:06:11.64 ID:jGvSXJ+5

なんかおかしいぞ

26以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:10:39.61 ID:jGvSXJ+5

自決しました

28以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:18:12.32 ID:jGvSXJ+5

b'\x90\xb0\x82\xea'
↑byte列をstr型に変換したいから
b = b'\x90\xb0\x82\xea'
a = str(b)
みたいな感じにしたんだけど、そうするとb'\x90\xb0\x82\xea'って入っちゃう
b''が要らないんだけど消せないのかな。。

29以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:19:37.32 ID:jGvSXJ+5

>>27
なるほどなぁ
ありがとう
要は機械語は融通が利かないのね

30以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:21:38.14 ID:jGvSXJ+5

今やりたいのは、日本語を含むURLから、日本語部分をshift-jisに変換させてURLに組み込むってやつ
yahooのAPIは日本語のままぶっ込んでも大丈夫なように作られてるけど他はそうでもないから

33以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:32:06.14 ID:jGvSXJ+5

古いシステムのサイトだから特殊事例なんだと思う...
そのサイトの検索結果のURLはkeyword.php?keyword=[検索値]って感じになって表示されてて
検索値は日本語をshift-jisに変換させたものだった
だから
URL = "keyword.php?keyword="+[shift-jis化させた好きな検索値]
とすることで、好きな検索結果を取得することができるんじゃないかなって期待してるんだけど
byteをstrにすると b'shift-jisの文字' って感じにbが付いて来ちゃうから、検索結果に影響が及ぼされるんじゃないかと思った

34以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:35:51.01 ID:jGvSXJ+5

>>32
その内容のドキュメント見たら、ホンマにニーズに合致した内容でした...感謝...
quote_plusは追加するって感じなんだね
ちょっと公式ドキュメントの説明足りなくて変わらないURLの部分とどう組み合わせるのかもうちょっと調べる必要がある

36以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:46:09.47 ID:jGvSXJ+5

>>35
それいいなって思ったけど、jsonは
{'晴れ': 100, 'いい天気': 87}
って出てて、必要な検索値は'晴れ'や'いい天気'だからキーの部分のみが必要になると思う
urllib.parse.urlencode(json,encoding="shift-jis")
としたら、値1や2も入ってしまわない?

37以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:46:49.63 ID:jGvSXJ+5

自決しました
jsonからキーだけ抽出したのを
urllib.parse.urlencode(ここ,encoding="shift-jis")に入れればよかったんだ

38以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:47:44.42 ID:jGvSXJ+5

どうやらそれはできないようだ

39以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:49:19.23 ID:jGvSXJ+5

>>33
一応非効率だけど.replaceで整形することはできるね

40以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 21:20:25.48 ID:jGvSXJ+5

一応なんとかなった
色々アドバイスありがとう
半年前に比べて自分の中でも理解力がある程度高まって来たと思う


このIDをNGリストに追加する

今後このIDの書き込みやスレッドを表示したくない場合、以下のボタンをクリックしてください。
NGリストに追加

このスレッドは過去ログです。