- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了我的学校项目,我必须从 Twitter 收集数据。现在我找到了以下代码,但我一直收到 OAuth 消费者 key / secret 组合未提供错误,而且我不知道如何修复它。有什么解决办法吗?
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import twitter4j.IDs;
import twitter4j.Paging;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.auth.AccessToken;
// TODO: preserve network distribution: normalize number of nodes
// TODO: discard re-tweet option
// TODO: multifocal approach
public class TwitterCrawler {
public static final String FOCAL_NODE = "euromast";
public static final int NUMBER_LINKS = 5;
public static final int NUMBER_NODES = 40;
public static final int NUMBER_STATUSES = 20;
public String networkOutputFile = "Users/Chris/Desktop/data/twitter.csv";
public String contentOutputFile = "/Users/Chris/Desktop/data/twitter2.txt";
private static Twitter twitter;
public TwitterCrawler() {
try {
twitter = new TwitterFactory().getInstance();
AccessToken token = twitter.getOAuthAccessToken();
System.out.println("Access Token " + token);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public HashSet<User> getFriends(User u, int max) throws Exception {
HashSet<User> ret = new HashSet<User>();
long cursor = -1;
IDs ids;
int count = 0;
do {
ids = twitter.getFriendsIDs(u.getScreenName(), cursor);
for (int i = 0; i < ids.getIDs().length && i < max; i++) {
long id = ids.getIDs()[i];
ret.add(twitter.showUser(id));
}
count++;
} while ((cursor = ids.getNextCursor()) != 0 && count < max);
return ret;
}
public void crawl() throws TwitterException, IOException {
ArrayList<User> ret = new ArrayList<User>();
HashMap<User, HashSet<Link>> links = new HashMap<User, HashSet<Link>>();
HashMap<User, ResponseList<Status>> statuses = new HashMap<User, ResponseList<Status>>();
String[] startnodes = { FOCAL_NODE };
Twitter twitter = new TwitterFactory().getInstance();
ResponseList<User> users = twitter.lookupUsers(startnodes);
// ret.addAll(users);
for (int i = 0; i < users.size() && ret.size() < NUMBER_NODES; i++) {
User user = (User) users.get(i);// it.next();
try {
// save links
Iterator it2 = this.getFriends(user, NUMBER_LINKS).iterator(); // this
// might
// throw
// an
// "unauthorized"
// exception
// that's
// why
// it
// should
// come
// first
links.put(user, new HashSet<Link>());
int countFriends = 0;
while (it2.hasNext() && countFriends < NUMBER_LINKS) {
User friend = (User) it2.next();
Link l = new Link(user, friend);
links.get(user).add(l);
users.add(friend);
countFriends++;
}
// successfully fetched user info, save user
ret.add(user);
// save statuses
Paging paging = new Paging(1, NUMBER_STATUSES);
ResponseList<Status> userStatuses = twitter.getUserTimeline(
user.getId(), paging);
statuses.put(user, userStatuses);
System.out.println("Done with: @" + user.getScreenName());
} catch (Exception e) {
// System.err.println(e.getMessage());
System.out.println("Error - not authorized for: "
+ user.getScreenName() + " - skipping...");
// remove links to people that had "unauthorized access"
// exception
for (HashSet<Link> linksPerUser : links.values()) {
ArrayList<Link> markedForRemoval = new ArrayList<Link>();
for (Link curLink : linksPerUser) {
if (curLink.from.getId() == user.getId()
|| curLink.to.getId() == user.getId()) {
markedForRemoval.add(curLink);
}
}
for (Link toRemoveLink : markedForRemoval) {
linksPerUser.remove(toRemoveLink);
}
}
}
}
saveToCSVFile(ret, links);
saveContentToFile(statuses);
}
/*
* Saves the network in NET format (Pajek)
* http://gephi.org/users/supported-graph-formats/pajek-net-format/
*/
public void saveToNetFile(ArrayList<User> users,
HashMap<User, HashSet<Link>> links,
HashMap<User, ResponseList<Status>> statuses) throws IOException {
FileOutputStream fout = new FileOutputStream(
new File(networkOutputFile));
PrintStream ps = new PrintStream(fout);
String linksString = "*Edges\n";
ps.println("*Vertices " + users.size());
for (User user : users) {
ps.println(user.getId() + " \"" + user.getScreenName() + "\"");
if (links.containsKey(user)) {
for (Link link : links.get(user)) {
linksString += link.toString() + "\n";
}
}
}
ps.println(linksString);
ps.close();
fout.close();
}
public void saveToCSVFile(ArrayList<User> users,
HashMap<User, HashSet<Link>> links) throws IOException {
FileOutputStream fout = new FileOutputStream(
new File(networkOutputFile));
PrintStream ps = new PrintStream(fout);
for (HashSet<Link> linksPerUser : links.values()) {
if (linksPerUser.size() > 0) {
ps.print(linksPerUser.iterator().next().from.getScreenName()
+ ";");
for (Link curLink : linksPerUser) {
ps.print(curLink.to.getScreenName() + ";");
}
ps.print("\n");
}
}
ps.close();
fout.close();
}
public void saveContentToFile(HashMap<User, ResponseList<Status>> statuses)
throws IOException {
FileOutputStream fout = new FileOutputStream(
new File(contentOutputFile));
PrintStream ps = new PrintStream(fout);
for (ResponseList<Status> statusesPerUser : statuses.values()) {
if (statusesPerUser.size() > 0) {
ps.println(statusesPerUser.iterator().next().getUser()
.getScreenName()
+ " " + statusesPerUser.size());
for (Status curStatus : statusesPerUser) {
ps.println(curStatus.getText().replace("\n", "") + ""); // very
// important:
// replace
// line
// breaks
}
}
}
ps.close();
fout.close();
}
public static void main(String[] args) {
try {
TwitterCrawler cn = new TwitterCrawler();
cn.crawl();
} catch (TwitterException te) {
te.printStackTrace();
System.out.println("Failed to lookup users: " + te.getMessage());
System.exit(-1);
} catch (Exception e) {
e.printStackTrace();
}
}
class Link {
public User from;
public User to;
public Link(User f, User t) {
from = f;
to = t;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null || !(this.getClass() != obj.getClass())) {
return false;
}
Link other = (Link) obj;
return this.from.getId() == other.from.getId()
&& this.to.getId() == other.to.getId();
}
@Override
public int hashCode() {
return String.valueOf(this.from.getId()).hashCode()
+ String.valueOf(this.to.getId()).hashCode();
}
@Override
public String toString() {
return String.valueOf(this.from.getId()) + " "
+ String.valueOf(this.to.getId());
}
}
最佳答案
我不得不承认自从我上次创建 Twitter 应用程序以来已经有两年了。但我记得认证过程很复杂而且相当繁琐。我在您的代码中找不到任何身份验证步骤,所以我猜您的问题源于这个事实。您有很多选择要如何验证您的爬虫。但据我所知,您只想访问用户的好友列表。
对于此用例,您只需要单用户身份验证。为了获得一个,请按照 this page 上的步骤操作.
请注意,您可以提出的请求数量会有限制。
关于java - 我不断收到 "OAuth consumer key/secret combination not supplied"错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28898335/
我正在尝试在我的 minikube 上启动并运行 keycloak。 我正在安装keycloak helm upgrade -i -f kubernetes/keycloak/values.yaml
我将我的数据库密码存储到AWS密钥管理器的Secret Value字段中。如果我使用以下代码,如何检索密码值?。在密钥管理器中定义的密钥:密钥在密钥管理器中定义的值:DBPwd。当我写入日志文件时,上
I am storing my database password into the Secret value field in the aws secret manager. How do I
我正在尝试在 AWS CDK 上组合一个相对简单的堆栈,其中涉及来自 aws-ecs-patterns 的 ApplicationLoadBalancedFargateService。 我的问题涉及
今天我在悠闲地阅读时偶然发现了 Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryp
不是一个真正的编程问题,但很想知道 Kubernetes 或 Minikube 如何管理 secret 并在多个节点/pod 上使用它? 假设我创建了一个 secret 来使用 kubectl 提取图
我需要从 AWS dynamoDB 和第三方 https 服务中获取元素并将这些结果合并到 AWS appSyn 中并将结果作为 graphQL 响应发回 我正在使用的第三方服务需要客户端证书。我没有
我收到一个错误: gpg: no default secret key: No secret key gpg: [stdin]: clearsign failed: No secret key GPG
我正在尝试为 kubernetes 集群设置私有(private) docker 镜像注册表。我正在关注 link $ cat ~/.docker/config.json | base64 ew
当我开发一个API服务器时,我需要给API服务器一些账户信息,这些信息不应该给任何人看。K8s对这种情况推荐secret,所以我用了。 但我想知道这个 secret 是否真的是 secret 。 se
在大多数有关在 Kubernetes 中使用 secret 的示例中,您都可以找到类似的示例: apiVersion: v1 kind: Secret metadata: name: mysecr
我正在与 terraform 合作,在 azure 中启动不同的资源。其中一些资源包含敏感数据,我希望将其安全地存储在 aws Secret Manager 中。这在 Terraform 中是可行的过
我有带有有效 key 的 Azure 应用程序注册。 我正在尝试使用 v1.0 获取 token ,如下所示(clientId 是上述应用程序注册的 ID) $body = @{ grant_
本文讨论如何安装 secret 卷。 https://learn.microsoft.com/en-us/azure/container-instances/container-instances-v
我正在使用 kubernetes 将 Rails 应用程序部署到谷歌容器引擎。 遵循 kubernetes secret 文档:http://kubernetes.io/v1.1/docs/user-
我正在与 terraform 合作,在 azure 中启动不同的资源。其中一些资源包含敏感数据,我希望将其安全地存储在 aws Secret Manager 中。这在 Terraform 中是可行的过
我有带有有效 key 的 Azure 应用程序注册。 我正在尝试使用 v1.0 获取 token ,如下所示(clientId 是上述应用程序注册的 ID) $body = @{ grant_
本文讨论如何安装 secret 卷。 https://learn.microsoft.com/en-us/azure/container-instances/container-instances-v
我有一个 python 脚本,它在 AWS 中创建一些访问 key 并将它们存储在 secret 管理器中。 但是,当我存储 key 时,我收到一条错误消息: The secret value can
我在 Secrets Manager 控制台上创建了一个 key 。然后我尝试使用 Go 代码 quickstart guide喜欢 ctx := context.Background() clien
我是一名优秀的程序员,十分优秀!