質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

304閲覧

GetOldTweets-pythonのsetQuerySearchの引数を2つ設定したい。

sawady0920

総合スコア13

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/10 06:52

GetOldTweets-pythonのsetQuerySearchを用いて「"神田","甲高い"」などと2変数で検索をかけることで駄洒落を検出したいです。

やったこと

TweetCriteria.py内のsetQuerySearchをいじってself.querySearchの値を変えようとしたが、この方法では"神田"と"甲高い"を接続して一つの文字列にして検索しているだけになってしまう。
=>それぞれが含まれているツイート全てを検出したい。
TweetManager内をいじろうとしたが、知識不足のためどういじれば良いのか分からなかった。

以下ソースコード

実行するコード

python

1# 検索でツイートを取得 2#!/usr/bin/env python 3# -*- coding: utf-8 -*- 4 5import got3 as got 6 7tweetCriteria = got.manager.TweetCriteria().setQuerySearch2('甲高い',"神田").setSince("2015-05-01").setUntil( 8 "2018-09-30").setMaxTweets(10) 9tweet = got.manager.TweetManager.getTweets(tweetCriteria)[0] 10 11print(tweet.text)

got3ディレクトリ内のTweetCriteria.py

python

1class TweetCriteria: 2 3 def __init__(self): 4 self.maxTweets = 0 5 6 def setUsername(self, username): 7 self.username = username 8 return self 9 10 def setSince(self, since): 11 self.since = since 12 return self 13 14 def setUntil(self, until): 15 self.until = until 16 return self 17 18 def setQuerySearch(self, querySearch): 19 self.querySearch = querySearch 20 return self 21 22 def setMaxTweets(self, maxTweets): 23 self.maxTweets = maxTweets 24 return self 25 26 def setLang(self, Lang): 27 self.lang = Lang 28 return self 29 30 def setTopTweets(self, topTweets): 31 self.topTweets = topTweets 32 return self 33""" 34下のsetQuerySearchの元はこのコード 35 def setQuerySearch(self, querySearch): 36 self.querySearch = querySearch 37 return self 38""" 39 def setQuerySearch2(self, querySearch1,querySearch2): 40 self.querySearch = querySearch1 41 self.querySearch += querySearch2 42 return self

got3ディレクトリ内のTweetManager.py

python

1import urllib.request, urllib.parse, urllib.error,urllib.request,urllib.error,urllib.parse,json,re,datetime,sys,http.cookiejar 2from .. import models 3from pyquery import PyQuery 4 5class TweetManager: 6 7 def __init__(self): 8 pass 9 10 @staticmethod 11 def getTweets(tweetCriteria, receiveBuffer=None, bufferLength=100, proxy=None): 12 refreshCursor = '' 13 14 results = [] 15 resultsAux = [] 16 cookieJar = http.cookiejar.CookieJar() 17 18 active = True 19 20 while active: 21 json = TweetManager.getJsonReponse(tweetCriteria, refreshCursor, cookieJar, proxy) 22 if len(json['items_html'].strip()) == 0: 23 break 24 25 refreshCursor = json['min_position'] 26 scrapedTweets = PyQuery(json['items_html']) 27 #Remove incomplete tweets withheld by Twitter Guidelines 28 scrapedTweets.remove('div.withheld-tweet') 29 tweets = scrapedTweets('div.js-stream-tweet') 30 31 if len(tweets) == 0: 32 break 33 34 for tweetHTML in tweets: 35 tweetPQ = PyQuery(tweetHTML) 36 tweet = models.Tweet() 37 38 usernameTweet = tweetPQ("span.username.js-action-profile-name b").text() 39 txt = re.sub(r"\s+", " ", tweetPQ("p.js-tweet-text").text().replace('# ', '#').replace('@ ', '@')) 40 retweets = int(tweetPQ("span.ProfileTweet-action--retweet span.ProfileTweet-actionCount").attr("data-tweet-stat-count").replace(",", "")) 41 favorites = int(tweetPQ("span.ProfileTweet-action--favorite span.ProfileTweet-actionCount").attr("data-tweet-stat-count").replace(",", "")) 42 dateSec = int(tweetPQ("small.time span.js-short-timestamp").attr("data-time")) 43 id = tweetPQ.attr("data-tweet-id") 44 permalink = tweetPQ.attr("data-permalink-path") 45 user_id = int(tweetPQ("a.js-user-profile-link").attr("data-user-id")) 46 47 geo = '' 48 geoSpan = tweetPQ('span.Tweet-geo') 49 if len(geoSpan) > 0: 50 geo = geoSpan.attr('title') 51 urls = [] 52 for link in tweetPQ("a"): 53 try: 54 urls.append((link.attrib["data-expanded-url"])) 55 except KeyError: 56 pass 57 tweet.id = id 58 tweet.permalink = 'https://twitter.com' + permalink 59 tweet.username = usernameTweet 60 61 tweet.text = txt 62 tweet.date = datetime.datetime.fromtimestamp(dateSec) 63 tweet.formatted_date = datetime.datetime.fromtimestamp(dateSec).strftime("%a %b %d %X +0000 %Y") 64 tweet.retweets = retweets 65 tweet.favorites = favorites 66 tweet.mentions = " ".join(re.compile('(@\w*)').findall(tweet.text)) 67 tweet.hashtags = " ".join(re.compile('(#\w*)').findall(tweet.text)) 68 tweet.geo = geo 69 tweet.urls = ",".join(urls) 70 tweet.author_id = user_id 71 72 results.append(tweet) 73 resultsAux.append(tweet) 74 75 if receiveBuffer and len(resultsAux) >= bufferLength: 76 receiveBuffer(resultsAux) 77 resultsAux = [] 78 79 if tweetCriteria.maxTweets > 0 and len(results) >= tweetCriteria.maxTweets: 80 active = False 81 break 82 83 84 if receiveBuffer and len(resultsAux) > 0: 85 receiveBuffer(resultsAux) 86 87 return results 88 89 @staticmethod 90 def getJsonReponse(tweetCriteria, refreshCursor, cookieJar, proxy): 91 url = "https://twitter.com/i/search/timeline?f=tweets&q=%s&src=typd&%smax_position=%s" 92 93 urlGetData = '' 94 if hasattr(tweetCriteria, 'username'): 95 urlGetData += ' from:' + tweetCriteria.username 96 97 if hasattr(tweetCriteria, 'since'): 98 urlGetData += ' since:' + tweetCriteria.since 99 100 if hasattr(tweetCriteria, 'until'): 101 urlGetData += ' until:' + tweetCriteria.until 102 103 if hasattr(tweetCriteria, 'querySearch'): 104 urlGetData += ' ' + tweetCriteria.querySearch 105 106 # if hasattr(tweetCriteria, querySearch): 107 # urlGetData += ' ' + tweetCriteria.querySearch 108 109 if hasattr(tweetCriteria, 'lang'): 110 urlLang = 'lang=' + tweetCriteria.lang + '&' 111 else: 112 urlLang = '' 113 url = url % (urllib.parse.quote(urlGetData), urlLang, refreshCursor) 114 #print(url) 115 116 headers = [ 117 ('Host', "twitter.com"), 118 ('User-Agent', "Mozilla/5.0 (Windows NT 6.1; Win64; x64)"), 119 ('Accept', "application/json, text/javascript, */*; q=0.01"), 120 ('Accept-Language', "de,en-US;q=0.7,en;q=0.3"), 121 ('X-Requested-With', "XMLHttpRequest"), 122 ('Referer', url), 123 ('Connection', "keep-alive") 124 ] 125 126 if proxy: 127 opener = urllib.request.build_opener(urllib.request.ProxyHandler({'http': proxy, 'https': proxy}), urllib.request.HTTPCookieProcessor(cookieJar)) 128 else: 129 opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookieJar)) 130 opener.addheaders = headers 131 132 try: 133 response = opener.open(url) 134 jsonResponse = response.read() 135 except: 136 #print("Twitter weird response. Try to see on browser: ", url) 137 print("Twitter weird response. Try to see on browser: https://twitter.com/search?q=%s&src=typd" % urllib.parse.quote(urlGetData)) 138 print("Unexpected error:", sys.exc_info()[0]) 139 sys.exit() 140 return 141 142 dataJson = json.loads(jsonResponse.decode()) 143 144 return dataJson 145

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

TweetCriteria内のコードを次のようにすると解決できました。

python

1def setQuerySearch2(self, querySearch1,querySearch2): 2 self.querySearch = querySearch1 3 self.querySearch += " " 4 self.querySearch += querySearch2 5 return self

投稿2018/12/10 07:07

sawady0920

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問