मैं उपयोगकर्ता नामों के संबंध में ट्विटर से उपयोगकर्ता के अक्षांश और देशांतर को स्क्रैप करने का प्रयास कर रहा हूं। उपयोगकर्ता नाम सूची एक इनपुट फ़ाइल में 50 से अधिक नामों वाली एक सीएसवी फ़ाइल है। नीचे दो परीक्षण हैं जिन्हें मैंने दूर तक बनाया है। उनमें से कोई भी काम नहीं कर रहा है। कार्यक्रम में से किसी एक में सुधार या पूरी तरह से नए दृष्टिकोण का स्वागत है।ट्विटर से स्क्रैप उपयोगकर्ता स्थान
मेरे पास User_names
की सूची है और मैं उपयोगकर्ता प्रोफ़ाइल देखने और geolocation
प्रोफ़ाइल या समयरेखा से खींचने की कोशिश कर रहा हूं। मुझे इंटरनेट पर कहीं भी नमूने नहीं मिल सका।
मैं ट्विटर से उपयोगकर्ताओं के भौगोलिक स्थान प्राप्त करने के लिए एक बेहतर दृष्टिकोण की तलाश में हूं। मुझे एक ऐसा उदाहरण भी नहीं मिला जो उपयोगकर्ता_नाम या user_id के संदर्भ में उपयोगकर्ता स्थान को कटाई दिखाता है। क्या यह पहली जगह में भी संभव है?
इनपुट: इनपुट फ़ाइलें में 50k पंक्तियों
AfsarTamannaah,6.80E+17,12/24/2015,#chennaifloods
DEEPU_S_GIRI,6.80E+17,12/24/2015,#chennaifloods
DEEPU_S_GIRI,6.80E+17,12/24/2015,#weneverletyoudownstr
ndtv,6.80E+17,12/24/2015,#chennaifloods
1andonlyharsha,6.79E+17,12/21/2015,#chennaifloods
Shashkya,6.79E+17,12/21/2015,#moneyonmobile
Shashkya,6.79E+17,12/21/2015,#chennaifloods
timesofindia,6.79E+17,12/20/2015,#chennaifloods
ANI_news,6.78E+17,12/20/2015,#chennaifloods
DrAnbumaniPMK,6.78E+17,12/19/2015,#chennaifloods
timesofindia,6.78E+17,12/18/2015,#chennaifloods
SRKCHENNAIFC,6.78E+17,12/18/2015,#dilwalefdfs
SRKCHENNAIFC,6.78E+17,12/18/2015,#chennaifloods
AmeriCares,6.77E+17,12/16/2015,#india
AmeriCares,6.77E+17,12/16/2015,#chennaifloods
ChennaiRainsH,6.77E+17,12/15/2015,#chennairainshelp
ChennaiRainsH,6.77E+17,12/15/2015,#chennaifloods
AkkiPritam,6.77E+17,12/15/2015,#chennaifloods
कोड:
import tweepy
from tweepy import Stream
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
import pandas as pd
import json
import csv
import sys
import time
CONSUMER_KEY = 'XYZ'
CONSUMER_SECRET = 'XYZ'
ACCESS_KEY = 'XYZ'
ACCESS_SECRET = 'XYZ'
auth = OAuthHandler(CONSUMER_KEY,CONSUMER_SECRET)
api = tweepy.API(auth)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
data = pd.read_csv('user_keyword.csv')
df = ['user_name', 'user_id', 'date', 'keyword']
test = api.lookup_users(user_ids=['user_name'])
for user in test:
print user.user_name
print user.user_id
print user.date
print user.keyword
print user.geolocation
त्रुटि:
Traceback (most recent call last):
File "user_profile_location.py", line 24, in <module>
test = api.lookup_users(user_ids=['user_name'])
File "/usr/lib/python2.7/dist-packages/tweepy/api.py", line 150, in lookup_users
return self._lookup_users(list_to_csv(user_ids), list_to_csv(screen_names))
File "/usr/lib/python2.7/dist-packages/tweepy/binder.py", line 197, in _call
return method.execute()
File "/usr/lib/python2.7/dist-packages/tweepy/binder.py", line 173, in execute
raise TweepError(error_msg, resp)
tweepy.error.TweepError: [{'message': 'No user matches for specified terms.', 'code': 17}]
मैं हर उपयोगकर्ता को समझने जियोलोकेशन का हिस्सा नहीं है, लेकिन जो लोग भौगोलिक स्थान प्राप्त कर सकते हैं, वे प्रोफ़ाइल को सार्वजनिक रूप से खोलते रहेंगे।
उपयोगकर्ता के नाम और/या लैट लॉन के रूप में उपयोगकर्ता स्थान मैं देख रहा हूं।
यदि यह दृष्टिकोण सही नहीं है तो मैं विकल्पों के लिए भी खुला हूं।
अद्यतन एक: कुछ गहरी खोज के बाद मुझे यह website मिला जो बहुत करीबी समाधान प्रदान करता है, लेकिन मुझे इनपुट फ़ाइल से userName
पढ़ने की कोशिश करते समय त्रुटि मिल रही है।
यह कहता है कि केवल 100 उपयोगकर्ता की जानकारी को पकड़ लिया जा सकता है कि उस सीमा को उठाने का बेहतर तरीका क्या है?
कोड:
import sys
import string
import simplejson
from twython import Twython
import csv
import pandas as pd
#WE WILL USE THE VARIABLES DAY, MONTH, AND YEAR FOR OUR OUTPUT FILE NAME
import datetime
now = datetime.datetime.now()
day=int(now.day)
month=int(now.month)
year=int(now.year)
#FOR OAUTH AUTHENTICATION -- NEEDED TO ACCESS THE TWITTER API
t = Twython(app_key='ABC',
app_secret='ABC',
oauth_token='ABC',
oauth_token_secret='ABC')
#INPUT HAS NO HEADER NO INDEX
ids = pd.read_csv('user_keyword.csv', header=['userName', 'userID', 'Date', 'Keyword'], usecols=['userName'])
#ACCESS THE LOOKUP_USER METHOD OF THE TWITTER API -- GRAB INFO ON UP TO 100 IDS WITH EACH API CALL
users = t.lookup_user(user_id = ids)
#NAME OUR OUTPUT FILE - %i WILL BE REPLACED BY CURRENT MONTH, DAY, AND YEAR
outfn = "twitter_user_data_%i.%i.%i.csv" % (now.month, now.day, now.year)
#NAMES FOR HEADER ROW IN OUTPUT FILE
fields = "id, screen_name, name, created_at, url, followers_count, friends_count, statuses_count, \
favourites_count, listed_count, \
contributors_enabled, description, protected, location, lang, expanded_url".split()
#INITIALIZE OUTPUT FILE AND WRITE HEADER ROW
outfp = open(outfn, "w")
outfp.write(string.join(fields, "\t") + "\n") # header
#THE VARIABLE 'USERS' CONTAINS INFORMATION OF THE 32 TWITTER USER IDS LISTED ABOVE
#THIS BLOCK WILL LOOP OVER EACH OF THESE IDS, CREATE VARIABLES, AND OUTPUT TO FILE
for entry in users:
#CREATE EMPTY DICTIONARY
r = {}
for f in fields:
r[f] = ""
#ASSIGN VALUE OF 'ID' FIELD IN JSON TO 'ID' FIELD IN OUR DICTIONARY
r['id'] = entry['id']
#SAME WITH 'SCREEN_NAME' HERE, AND FOR REST OF THE VARIABLES
r['screen_name'] = entry['screen_name']
r['name'] = entry['name']
r['created_at'] = entry['created_at']
r['url'] = entry['url']
r['followers_count'] = entry['followers_count']
r['friends_count'] = entry['friends_count']
r['statuses_count'] = entry['statuses_count']
r['favourites_count'] = entry['favourites_count']
r['listed_count'] = entry['listed_count']
r['contributors_enabled'] = entry['contributors_enabled']
r['description'] = entry['description']
r['protected'] = entry['protected']
r['location'] = entry['location']
r['lang'] = entry['lang']
#NOT EVERY ID WILL HAVE A 'URL' KEY, SO CHECK FOR ITS EXISTENCE WITH IF CLAUSE
if 'url' in entry['entities']:
r['expanded_url'] = entry['entities']['url']['urls'][0]['expanded_url']
else:
r['expanded_url'] = ''
print r
#CREATE EMPTY LIST
lst = []
#ADD DATA FOR EACH VARIABLE
for f in fields:
lst.append(unicode(r[f]).replace("\/", "/"))
#WRITE ROW WITH DATA IN LIST
outfp.write(string.join(lst, "\t").encode("utf-8") + "\n")
outfp.close()
त्रुटि:
File "user_profile_location.py", line 35, in <module>
ids = pd.read_csv('user_keyword.csv', header=['userName', 'userID', 'Date', 'Keyword'], usecols=['userName'])
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 562, in parser_f
return _read(filepath_or_buffer, kwds)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 315, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 645, in __init__
self._make_engine(self.engine)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 799, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 1202, in __init__
ParserBase.__init__(self, kwds)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 918, in __init__
raise ValueError("cannot specify usecols when "
ValueError: cannot specify usecols when specifying a multi-index header
आप क्या पूछ रहे हैं? क्या आप 'ट्वीपी' से प्राप्त त्रुटि को नहीं समझते हैं? क्या आपको नहीं पता कि [त्रुटियों को कैसे संभालें] (https://docs.python.org/2/tutorial/errors.html#handling-exceptions)? – jonrsharpe
कृपया अपना कोड पढ़ें, आप 'user_ids = ['user_name'] 'के लिए पूछ रहे हैं, जो संभवतः विफल रहता है क्योंकि' user_name' नामक कोई ट्विटर उपयोगकर्ता नहीं है। – oystein
@oystein गंभीरता से उपयोगकर्ता नाम के साथ स्थान प्राप्त करने के लिए कोड के साथ कुछ मदद की सराहना करेगा। –