从 Twitter 抓取用户位置

2023-11-21

我正在尝试从 Twitter 中获取用户名的纬度和经度。用户名列表是一个 csv 文件,一个输入文件中包含 50 多个名称。以下是我迄今为止所做的两次尝试。他们似乎都没有工作。欢迎对任何一个程序进行更正或采用全新的方法。

我有清单User_names我正在尝试查找用户个人资料并提取geolocation从个人资料或时间线。我在互联网上找不到太多样本。

我正在寻找一种更好的方法来从 Twitter 获取用户的地理位置。我什至找不到一个示例来显示参考 User_name 或 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

Code:

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

Error:

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 个用户的信息,有什么更好的方法来解除该限制?

Code:

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()    

Error:

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

假设您只想获取用户个人资料页面中显示的位置,您可以使用API.get_user来自推威。下面是工作代码。

#!/usr/bin/env python
from __future__ import print_function

#Import the necessary methods from tweepy library
import tweepy
from tweepy import OAuthHandler


#user credentials to access Twitter API 
access_token = "your access token here"
access_token_secret = "your access token secret key here"
consumer_key = "your consumer key here"
consumer_secret = "your consumer secret key here"


def get_user_details(username):
        userobj = api.get_user(username)
        return userobj


if __name__ == '__main__':
    #authenticating the app (https://apps.twitter.com/)
    auth = tweepy.auth.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth)

    #for list of usernames, put them in iterable and call the function
    username = 'thinkgeek'
    userOBJ = get_user_details(username)
    print(userOBJ.location)

Note:这是一个粗略的实现。编写适当的休眠函数以遵守 Twitter API 访问限制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Twitter 抓取用户位置 的相关文章

随机推荐

  • 如何使用 dplyr 编程语法来创建和计算变量名称

    我想使用 dplyr 编程语法动态输入变量名 但是 正如许多人所描述的那样 这可能非常令人困惑 我尝试过各种 quo enquo 的组合 等等都无济于事 这是我的代码的最简单形式 library tidyverse df lt tibble
  • 按指定顺序按 id 查找 ActiveRecord 对象的简洁方法

    我想获取给定 id 数组的 ActiveRecord 对象数组 我假设 Object find 5 2 3 将返回一个依次包含对象 5 对象 2 对象 3 的数组 但我得到的数组按对象 2 对象 3 对象 5 的顺序排列 ActiveRec
  • 使用 WinAPI 进行简单的 AES 加密

    我需要在我的 Qt C 应用程序中进行简单的单块 AES 加密 解密 这是一个 让诚实的人诚实 的实现 所以只是一个基本的encrypt key data 是必要的 我不担心初始化向量等 我的输入和密钥将始终恰好是 16 个字节 I d r
  • 在网络上获取 Python 脚本输出的最简单方法是什么?

    我有一个连续运行的 python 脚本 它每 30 秒输出 2 行信息 我希望能够在网络上查看此输出 特别是 我希望网站能够自动更新 每 30 秒在页面 网站顶部添加新输出 而无需刷新页面 我知道我可以用 javascript 做到这一点
  • GWT:在服务器代码中访问 i18n 消息

    我有一个扩展的接口com google gwt i18n client Messages类 我用它在 GWT 应用程序中检索 i18n 消息 它看起来像这样 public interface MyMessages extends com g
  • jQuery 触发 DatePicker 更改事件

    我有以下代码 custom datepicker selector datepicker weekStart 1 on changeDate function en var correct format correct format en
  • 未标记 AcceptVerbs、HttpGet 或 HttpPost 的控制器操作的默认行为是什么?

    如果我创建一个控制器操作并且不使用它来装饰它AcceptVerbs HttpPost or HttpGet 默认行为是什么 该操作是否允许任何访问方法或默认为GET 它可以通过任何动词访问
  • java中equals方法的实现

    这是我对 Coor 类的 equals 类的实现 它只包含 2 个整数 x 和 y 这是实现该方法的正确方法吗 public boolean equals Object obj if obj null obj getClass this g
  • Python3 Tkinter 字体不工作

    我将 python 3 3 与 tkinter 一起使用 并且安装了 python3 tk 包 在大多数文档中 使用旧的 import tkFont 它不再起作用 这应该有效 from tkinter import font appHigh
  • C++ 中的虚拟网络摄像头

    我想编写一个新的虚拟网络摄像头驱动程序 例如它将采用 AVI 或实时流作为屏幕并将其作为网络摄像头源进行流式传输 我真的不会有网络摄像头 我想添加一个可以传输桌面屏幕的虚拟网络摄像头 我应该在内核模式下编写一个网络摄像头来做到这一点 如果是
  • 遍历并修改dict结构的树状列表

    我有一个如下所示的结构 id 4 children None id 2 children id 1 children id 6 children None id 5 children None id 7 children id 3 chil
  • 拳击会导致性能问题吗?

    我正在开发一个项目 其中我们正在生成一种编译为 java 的语言 我们使用的框架 xtext 在其生成的代码中大量使用了装箱 具体来说 如果您有如下声明 int i 1 int j 2 int k i j 然后编译后的代码如下所示 Inte
  • ESLint:创建下一个应用程序时选项无效

    我正在创建一个新的 Next js 应用程序 当我跑步时yarn create next app我开始在 Visual Studio Code 中编写 javascript 代码 每次我输入数字时 ESlint 扩展都会返回一个错误 当然
  • 如何在 Grails 中更新外部配置文件而不重建 war 文件

    如何更新外部配置文件 例如 config ex groovy config ex properties 而不在 Grails 中重建 war 文件 重新启动应用程序服务器将应用外部配置文件中的新更新 如果我理解得很好的话 你想在战争之外外部
  • 反向 Java Graphics2D 缩放和旋转坐标

    我使用Java中的Graphics2D来缩放和旋转我绘制的图片 我现在希望能够在单击图片中的某个点时知道原始坐标是什么 因此 鉴于旋转和缩放的坐标 我想计算原始坐标 有没有一种简单的方法可以做到这一点 如果您保留一份副本AffineTran
  • Python 中 module.__init__() 最多接受 2 个参数错误

    我有 3 个文件 factory imagenet py imdb py 和 imagenet py factory imagenet py 有 import datasets imagenet 它还有一个函数调用为 datasets im
  • maven命令中-D表示什么?

    谁能解释一下 D 在 maven 命令中表示什么 mvn clean install DskipTests 您定义了一个可由Maven 插件 or 在 pom 内部使用 gt mvn help usage mvn options Optio
  • 为什么 `cat <(cat)` 会产生 EIO?

    我有一个程序可以同时读取两个输入文件 我想让这个程序从标准输入读取 我想我会用这样的东西 program1 lt cat lt program2 但我刚刚发现 cat lt cat produces mmap2 NULL 139264 PR
  • 通过 Heroku 上托管的 Rails 上传和解压缩文件到 S3?

    我希望能够将包含许多图像的 zip 文件上传到我的 Rails 应用程序 然后我希望 Rails 解压该文件并将其中的图像附加到我的照片模型中回形针 以便它们最终存储在我的 Amazon S3 帐户中 通过 Paperclip 配置 我想在
  • 从 Twitter 抓取用户位置

    我正在尝试从 Twitter 中获取用户名的纬度和经度 用户名列表是一个 csv 文件 一个输入文件中包含 50 多个名称 以下是我迄今为止所做的两次尝试 他们似乎都没有工作 欢迎对任何一个程序进行更正或采用全新的方法 我有清单User n