GWだからプログラミングしてる

最新10レス最新30レス
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うまく動かなかった
侍エンジニアブログはクソ

10以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:45:43.21 ID:x44Gqjsd

xmlのみ…?

11以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 17:46:36.37 ID:eWU35uHC

LXMLおすすめ

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使ってやったよ

13以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:20:31.61 ID:N76zc48b

Python の XML パーザーって公式ドキュメントに「脆弱性あるから使わんとって」と書いてあって使い方もへんちくりんなゴミしかない
仕方なく使うけど俺がほしいのは DOM のインターフェースをそのまま丸パクリ実装した奴やねんといつも思う

14以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:22:29.46 ID:4VUqQ1Qf

これはjsonなりxmlを作ってあげれば
それをいい感じに表示してくれるとかそんなん…?
なんかいまいち何がしたいのか分からん

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('文字コード名')で、変数使えない前提みたいな書き方してんの

17以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:37:47.59 ID:N76zc48b

json 形式でデータをもらえるなら
import json
json.loads(もらったデータ)
で Python オブジェクトになるよ

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
あっ...!あっ...!

20以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 19:42:34.09 ID:i/zb7TeX

変数の型が文字列なら 文字列.encode()できるよ

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

自決しました

27以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:16:44.74 ID:N76zc48b

str (文字列) は文字の列
人間が読んだり書いたりする文字の列

コンピューターは人間ではないので文字は読めない
なのでときどき文字列を数値列 (bytes) に置き換える必要がある

文字列を数値列にするのがエンコード (暗号化[人が読めない形式になるから])
逆がデコード (復号化[人が読める形式になるから])

エンコードに使った方式と違う方式でデコードすると復号できない
デコードして文字列になったものを別形式でエンコードすることはできる

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は日本語のままぶっ込んでも大丈夫なように作られてるけど他はそうでもないから

31以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:25:14.29 ID:N76zc48b

普通現代的なウェブサイトなら URL の日本語部分は shift-jis でなく utf-8 のはずなんだが
例えばどんな感じの URL にしたいの

32以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:31:21.89 ID:N76zc48b

import urllib.parse
urllib.parse.quote_plus("日本語")
urllib.parse.quote_plus("日本語", encoding="shift-jis")

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の部分とどう組み合わせるのかもうちょっと調べる必要がある

35以下、名無しにかわりましてVIPがお送りします:2019/04/27(土) 20:40:36.57 ID:N76zc48b

普通はこれ使うのが一番楽:

urllib.parse.urlencode({
  "key1": "値1",
  "key2": "値2",
  },
  encoding="shift-jis"
  )

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

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

41以下、名無しにかわりましてVIPがお送りします:2019/04/28(日) 10:34:46.82 ID:BOw1Z4p4

何言語なんだ?

42以下、名無しにかわりましてVIPがお送りします:2019/04/28(日) 10:35:31.59 ID:BOw1Z4p4

初心者レベル?

43以下、名無しにかわりましてVIPがお送りします:2019/04/28(日) 15:17:01.17 ID:SnQjaN6v

>>27
暗号化の逆は「復号」やで

44以下、名無しにかわりましてVIPがお送りします:2019/04/28(日) 23:30:08.43 ID:k8Ukr07Q

>>41
Python使ってるよー
初心者だと思う

復号でも復号化でも俺には伝わったからいいんだぜ

45以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 00:38:59.38 ID:TjZY+qg1

目標は何?

46以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 00:51:16.57 ID:Bw3BXs42

ふんわりし過ぎてて難しい...
今回作るものに関して?
それなら、twitterの自分宛に特定のハッシュタグ付きでリプライがきたら、そのツイート内容を言語処理して、抽出されたワードを返す/もしくは更に解析してその結果を返す
って事がしたいね
crontabで動かそうと思ってるけど、自分のラップトップで常に動かすのはなんか嫌な気もするから
もしできるなら、それを自分のラズパイで動かしてみたい

それともプログラミングスキルについての目標というなら
もうちょっとプログラミングに慣れることだね
最近ようやく、情報収集についてforループで適宜取り出せばいいことや、あらかじめ配列などを初期化しておくことでスムーズに情報を取得できるようになることを理解し始めた
できることなら、もっとフレームワークやAPIについて柔軟な理解がしたいし
あの難解な公式ドキュメントを読む読解力(想像力)が欲しい

47以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 08:16:49.94 ID:FO8r4Phk

おっぱいそん

48以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 15:46:24.24 ID:Bw3BXs42

おっぱいそん hello worldみたいな言葉だと思ってる
ちなみにね、pythonやり続けるとサブウェイに行きたくなるよ、マーク似てるから

49以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 18:24:00.58 ID:Bw3BXs42

tweepyでツイート取得しようとしてるけど
これ本当変で難解だなあ
「自分宛に、特定のハッシュタグをつけて送られたもの」
を調べる場合には、自分のタイムラインを見る他ないのかな
一応サーチして見るのもいいと思うんだけど、そんなことできるのか。。。

50以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 18:39:10.32 ID:Bw3BXs42

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

51以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 18:45:58.93 ID:Bw3BXs42

https://qiita.com/masahiro_isono/items/a6cfdd073686100f0ef1
こういう記事を参考にして見てるんだけど
tweepyとかpythonに適したtwitterのライブラリを使うのと、純粋にrequestsとか使ってgetやpostして取ってくるのって何が違うの?
tweepyである利点みたいなのが今のところよくわかってない
tweepyであることで得られるメリットより、tweepyの学習コストの方が高い気がする
つってもrequestsでの取り方とか公式ドキュメント見てもしっかり理解できないんだけどねハハハ

52以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 20:11:34.69 ID:Bw3BXs42

テス

53以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 20:12:19.90 ID:Bw3BXs42

メ欄に何か記載してもnepからじゃ確認できなくないか?

54以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 20:17:01.61 ID:Bw3BXs42

55以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 20:17:43.34 ID:Bw3BXs42

面白いことに気が付いた
nepじゃmail欄あるのに@が禁止なんだ
mail欄なのにwww

56以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 20:42:14.96 ID:Dj+pEIud

メ欄にアドレス書くやつなんていないからな

57以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 21:12:39.36 ID:Bw3BXs42

5chとかの掲示板でも未だにあるんでしょ?
不思議な機能だよねぇ

58以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 21:14:47.52 ID:9urZJ4TT

ツイッターAPIドキュメントを最初から最後までまるっとそらんじて理解している人たちが書いたライブラリーであって
しかもツイッター側に変更が起きたときにいち早く対応してくれる活発な開発陣がついているならば
自分で作るよりそれに頼るほうがいい
自分の方がうまくやれると思うレベルの低質なライブラリーなら頼らずに自分で書けばいい

低質なライブラリーであってもコードを盗み見る価値はあるかもしれない
ただし見比べて盗んだことがわかってしまうようなコードを書くと
それを公開してはいけなくなる (自分でこっそり使う分には何の問題もない)

59以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 22:07:11.12 ID:Bw3BXs42

tweepyはコピーライトに2009って書いてるから恐らく...
やっぱりrequestsでやるのが一番そうだね

て言うかwebAPIについての理解がまだ足りないんだけど
大雑把にこれはrequestsやurllibみたいなスクレイピングとかする奴(語彙力があれでゴメン)でGETとかして引き出したりする感じで操作するのかな

60以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 23:03:21.21 ID:Bw3BXs42

それより俺の管理が悪いんだろうけど
さっき急にvscodeからrequestsが消えた
コマンドパレットからインタプリタの選択ができるんだけどたくさんありすぎてヤバイ
なんでこんな散らかるんだろう
pythonのこの散らかったやつ(python2系とか3系、アナコンダとかたくさんある)のってどう整理してる?

61以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 23:38:37.00 ID:Bw3BXs42

バカな質問なんだけど、調べても出てこないから聞かせて欲しい

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と同じにしたい
だけど同じにならないんだよ...
どうすりゃいいんだ

62以下、名無しにかわりましてVIPがお送りします:2019/04/29(月) 23:39:43.93 ID:Bw3BXs42

ちなみにsetting.jsonには"python.pythonPath": "/anaconda3/bin/python",と記述してる

63以下、名無しにかわりましてVIPがお送りします:2019/04/30(火) 00:12:20.19 ID:HvpOP9Je

自決しました
どうやらAPI側の問題でアクセストークンが消えてた
なんで???

64以下、名無しにかわりましてVIPがお送りします:2019/04/30(火) 12:14:49.83 ID:HvpOP9Je

http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html#mokuji
会員準備読んでるけど辛くて泣けてくる


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