UnicodeEncodeError: 'ascii' codec can't encode characters in position 105-246: ordinal not in range(128)
積んだ
UnicodeEncodeError: 'ascii' codec can't encode characters in position 105-246: ordinal not in range(128)
積んだ
とりあえず入力した文字の後ろに.encode(encording="utf-8")と入れたらおとなしくなった
でも
URLに日本語を入れたいのにutf-8にしたら文字化けするよね
ダメですわね
sentence = "GWだけどずっとプログラミングしてる。今日はずっとこれだけしたい。"
url=(pageurl+"?appid="+appid+"&sentence="+sentence).encode(encoding='utf-8')
print(url)
with urllib.request.urlopen(url) as fin:
body = fin.read()
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
エンコードする理由やエンコードして何が得られるのか、どう言うエンコードをすればいいのかが分かってない
知り方もわからん
urllib 日本語URL
で検索をかけるとそれっぽい答えが出て来た
なるほど、urllib.requestじゃなくてもうrequests使えって話ね
しね!!!!!!!!!!
url=(pageurl+"?appid="+appid+"&sentence="+sentence).encode(encoding='utf-8')
print(url)
with requests.get(url) as fin:
body = fin.text
はああああああ
便利ですねrequests、人間のために作られてるって感じ感動
<?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>
整形したいわ!
XMLの解析... ElementTree!
ElementTree!使うわよ!
urllib使ってないからElementTreeうまく動かなかった
侍エンジニアブログはクソ
xmlのみ…?
LXMLおすすめ
使ったのはこれ
https://developer.yahoo.co.jp/webapi/jlp/keyphrase/v1/extract.html
URLの末尾に&output=つけてjsonだの、xmlだのつければ色々変えれるっぽい
jsonにしたら1行しか出ないし、utf-8なのか日本語が文字化けしてて読めなかったから諦めた
htmlを解析するみたいにbeautifulsoup使ってやったよ
Python の XML パーザーって公式ドキュメントに「脆弱性あるから使わんとって」と書いてあって使い方もへんちくりんなゴミしかない
仕方なく使うけど俺がほしいのは DOM のインターフェースをそのまま丸パクリ実装した奴やねんといつも思う
これはjsonなりxmlを作ってあげれば
それをいい感じに表示してくれるとかそんなん…?
なんかいまいち何がしたいのか分からん
言語解析してた
sentence = "おはようございます。今日はとてもいい天気ですね。明日は晴れです。"
って書いたら
>>7が出てくるようになってて
その中からKeyphraseに書かれている中身だけを取って来てたの
xmlなら、いちいちxmlで表示させて、bs4のhtmlパーサー使って、find_allしてkeyphraseだけ取って、forループ使って中のテキストを抽出...
とか言う長ったらしいデータのやりとりが必要になる
ちょっとググってたけど変数のなかに入れてしまった日本語のエンコードやデコードの記事ってないんだね
どれも'文字列'.encode('文字コード名')とかb'バイト列'.decode('文字コード名')で、変数使えない前提みたいな書き方してんの
json 形式でデータをもらえるなら
import json
json.loads(もらったデータ)
で Python オブジェクトになるよ
for i in words:
shift = i.encode("shift-jis")
一応これでエンコードはできるけど、デコードは
for i in shift:
utf = b.i.decode("utf-8")
とかできない
>>17
あっ...!あっ...!
変数の型が文字列なら 文字列.encode()できるよ
ちょっと待って
{'晴れ': 100, 'いい天気': 87}
って出すことできたけど、右の文字だけをとりあえず出して見ないことには始まらない
今の方法なら、text =['晴れ','いい天気']ってなってるよ
だからfor文で取り出してエンコードはしてる
json = json.loads(body)
print(json)
words=[]
for jsonwords,jsonscore in json.items():
words.append(jsonwords)
できました!
b'\x82\xa2\x82\xa2\x93V\x8bC'
って出たからデコードする場合はこれをしなきゃいけないのね
shift-jisでエンコードしたものはshift-jisでデコードしなきゃいけないのか
初めて知った
なんかおかしいぞ
自決しました
str (文字列) は文字の列
人間が読んだり書いたりする文字の列
コンピューターは人間ではないので文字は読めない
なのでときどき文字列を数値列 (bytes) に置き換える必要がある
文字列を数値列にするのがエンコード (暗号化[人が読めない形式になるから])
逆がデコード (復号化[人が読める形式になるから])
エンコードに使った方式と違う方式でデコードすると復号できない
デコードして文字列になったものを別形式でエンコードすることはできる
b'\x90\xb0\x82\xea'
↑byte列をstr型に変換したいから
b = b'\x90\xb0\x82\xea'
a = str(b)
みたいな感じにしたんだけど、そうするとb'\x90\xb0\x82\xea'って入っちゃう
b''が要らないんだけど消せないのかな。。
>>27
なるほどなぁ
ありがとう
要は機械語は融通が利かないのね
今やりたいのは、日本語を含むURLから、日本語部分をshift-jisに変換させてURLに組み込むってやつ
yahooのAPIは日本語のままぶっ込んでも大丈夫なように作られてるけど他はそうでもないから
普通現代的なウェブサイトなら URL の日本語部分は shift-jis でなく utf-8 のはずなんだが
例えばどんな感じの URL にしたいの
import urllib.parse
urllib.parse.quote_plus("日本語")
urllib.parse.quote_plus("日本語", encoding="shift-jis")
古いシステムのサイトだから特殊事例なんだと思う...
そのサイトの検索結果のURLはkeyword.php?keyword=[検索値]って感じになって表示されてて
検索値は日本語をshift-jisに変換させたものだった
だから
URL = "keyword.php?keyword="+[shift-jis化させた好きな検索値]
とすることで、好きな検索結果を取得することができるんじゃないかなって期待してるんだけど
byteをstrにすると b'shift-jisの文字' って感じにbが付いて来ちゃうから、検索結果に影響が及ぼされるんじゃないかと思った
>>32
その内容のドキュメント見たら、ホンマにニーズに合致した内容でした...感謝...
quote_plusは追加するって感じなんだね
ちょっと公式ドキュメントの説明足りなくて変わらないURLの部分とどう組み合わせるのかもうちょっと調べる必要がある
普通はこれ使うのが一番楽:
urllib.parse.urlencode({
"key1": "値1",
"key2": "値2",
},
encoding="shift-jis"
)
>>35
それいいなって思ったけど、jsonは
{'晴れ': 100, 'いい天気': 87}
って出てて、必要な検索値は'晴れ'や'いい天気'だからキーの部分のみが必要になると思う
urllib.parse.urlencode(json,encoding="shift-jis")
としたら、値1や2も入ってしまわない?
自決しました
jsonからキーだけ抽出したのを
urllib.parse.urlencode(ここ,encoding="shift-jis")に入れればよかったんだ
どうやらそれはできないようだ
>>33
一応非効率だけど.replaceで整形することはできるね
一応なんとかなった
色々アドバイスありがとう
半年前に比べて自分の中でも理解力がある程度高まって来たと思う
何言語なんだ?
初心者レベル?
>>27
暗号化の逆は「復号」やで
>>41
Python使ってるよー
初心者だと思う
復号でも復号化でも俺には伝わったからいいんだぜ
目標は何?
ふんわりし過ぎてて難しい...
今回作るものに関して?
それなら、twitterの自分宛に特定のハッシュタグ付きでリプライがきたら、そのツイート内容を言語処理して、抽出されたワードを返す/もしくは更に解析してその結果を返す
って事がしたいね
crontabで動かそうと思ってるけど、自分のラップトップで常に動かすのはなんか嫌な気もするから
もしできるなら、それを自分のラズパイで動かしてみたい
それともプログラミングスキルについての目標というなら
もうちょっとプログラミングに慣れることだね
最近ようやく、情報収集についてforループで適宜取り出せばいいことや、あらかじめ配列などを初期化しておくことでスムーズに情報を取得できるようになることを理解し始めた
できることなら、もっとフレームワークやAPIについて柔軟な理解がしたいし
あの難解な公式ドキュメントを読む読解力(想像力)が欲しい
おっぱいそん
おっぱいそん hello worldみたいな言葉だと思ってる
ちなみにね、pythonやり続けるとサブウェイに行きたくなるよ、マーク似てるから
tweepyでツイート取得しようとしてるけど
これ本当変で難解だなあ
「自分宛に、特定のハッシュタグをつけて送られたもの」
を調べる場合には、自分のタイムラインを見る他ないのかな
一応サーチして見るのもいいと思うんだけど、そんなことできるのか。。。
https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-mentions_timeline.html
これ???
メンションタイムラインのURL??
https://api.twitter.com/1.1/statuses/mentions_timeline.json
https://qiita.com/masahiro_isono/items/a6cfdd073686100f0ef1
こういう記事を参考にして見てるんだけど
tweepyとかpythonに適したtwitterのライブラリを使うのと、純粋にrequestsとか使ってgetやpostして取ってくるのって何が違うの?
tweepyである利点みたいなのが今のところよくわかってない
tweepyであることで得られるメリットより、tweepyの学習コストの方が高い気がする
つってもrequestsでの取り方とか公式ドキュメント見てもしっかり理解できないんだけどねハハハ
テス
メ欄に何か記載してもnepからじゃ確認できなくないか?
て
面白いことに気が付いた
nepじゃmail欄あるのに@が禁止なんだ
mail欄なのにwww
メ欄にアドレス書くやつなんていないからな
5chとかの掲示板でも未だにあるんでしょ?
不思議な機能だよねぇ
ツイッターAPIドキュメントを最初から最後までまるっとそらんじて理解している人たちが書いたライブラリーであって
しかもツイッター側に変更が起きたときにいち早く対応してくれる活発な開発陣がついているならば
自分で作るよりそれに頼るほうがいい
自分の方がうまくやれると思うレベルの低質なライブラリーなら頼らずに自分で書けばいい
低質なライブラリーであってもコードを盗み見る価値はあるかもしれない
ただし見比べて盗んだことがわかってしまうようなコードを書くと
それを公開してはいけなくなる (自分でこっそり使う分には何の問題もない)
tweepyはコピーライトに2009って書いてるから恐らく...
やっぱりrequestsでやるのが一番そうだね
て言うかwebAPIについての理解がまだ足りないんだけど
大雑把にこれはrequestsやurllibみたいなスクレイピングとかする奴(語彙力があれでゴメン)でGETとかして引き出したりする感じで操作するのかな
それより俺の管理が悪いんだろうけど
さっき急にvscodeからrequestsが消えた
コマンドパレットからインタプリタの選択ができるんだけどたくさんありすぎてヤバイ
なんでこんな散らかるんだろう
pythonのこの散らかったやつ(python2系とか3系、アナコンダとかたくさんある)のってどう整理してる?
バカな質問なんだけど、調べても出てこないから聞かせて欲しい
vscode内のターミナルではimport sysしてsys.path(どこにパス通ってるか調べてる)
したら/Users/NEPPER/.pyenv/versions/anaconda3-5.2.0/lib/python3.6
ってなるんだけど
Macのターミナルで確認すると/anaconda3/lib/python3.6
ってなる
pip listで確認するとMacの方が正しいからvscodeもMacと同じにしたい
だけど同じにならないんだよ...
どうすりゃいいんだ
ちなみにsetting.jsonには"python.pythonPath": "/anaconda3/bin/python",と記述してる
自決しました
どうやらAPI側の問題でアクセストークンが消えてた
なんで???
http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html#mokuji
会員準備読んでるけど辛くて泣けてくる