mfrost503/wheedle

此包已被废弃且不再维护。未建议替代包。

PHP Twitter Library

0.1.2 2015-04-03 18:18 UTC

This package is auto-updated.

Last update: 2024-06-05 23:23:36 UTC


README

PHP Twitter 库

68747470733a2f2f7472617669732d63692e6f72672f6d66726f73743530332f77686565646c652e7376673f6272616e63683d6d6173746572

[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/mfrost503/wheedle/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/mfrost503/wheedle/?branch=master) [![Build Status](https://scrutinizer-ci.com/g/mfrost503/wheedle/badges/build.png?b=master)](https://scrutinizer-ci.com/g/mfrost503/wheedle/build-status/master)

此库目前处于开发中,随着构建的进行将提供更多示例!

Wheedle 以一种通用的方式与 Twitter API 交互。使用 Guzzle 和 Snaggle 构建,你无需担心那些讨厌的 OAuth 1 签名。开始使用非常简单,只需传递你的令牌。

以下是一个如何轻松开始的示例!

目录

基础

此库是便捷方法和基于 Guzzle 的直观 HTTP 客户端的平衡。通过利用 Guzzle 和 Snaggle,我们能够最小化开始对 Twitter API 进行身份验证请求所需的设置。Twitter API 的几乎所有端点都可能为您提供额外的选项。如果该特定端点有便捷方法,则会提供选项,但是您可能需要查阅 Twitter API 文档 以获取有关您特定端点的更多信息。

目标是减轻处理 Twitter API 和其他不提供您所需功能的包装器和库的痛苦。我们旨在提供尽可能多的便捷性和易用性。如果您看到任何不正确或不完善的地方,贡献(问题、拉取请求、功能请求)总是受欢迎的。

便捷类方法

推文

Tweet 类将允许您检索和发布推文(或状态)。

检索

要检索推文,您需要知道推文的 ID,并将其作为参数传递给检索方法。

<?php
use Snaggle\Client\Credentials\AccessCredentials;
use Snaggle\Client\Credentials\ConsumerCredentials;
use Wheedle\TwitterClient;
use Wheedle\Tweet;
use Wheedle\Exceptions\RateLimitExceededException;
use Wheedle\Exceptions\UnauthorizedRequestException;
use \RuntimeException;

$accessToken = new AccessCredentials('YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_SECRET');

$consumerToken = new ConsumerCredentials('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');

$client = new TwitterClient($accessToken, $consumerToken);

$tweet = new Tweet($client);

try {

    $data = $tweet->retrieve(123456);

} catch (RuntimeException $e) {
    // handle Runtime Exception
} catch (RateLimitExceededException $e) {
    // handle rate limit exceeded exception
} catch (UnauthorizedRequestException $e) {
    // handle unauthorized request
}

您可以可选地传递一个参数数组以获取您所需的内容,对于检索,参数如下:

  • trim_user 布尔值 当为 true 时,返回仅包含数字 ID 的用户对象
  • include_my_retweet 布尔值 当为 true 时,任何被认证用户 RT 的推文都将包含 current_user_retweet 节点
  • include_entities boolean entities 节点将在设置为 false 时被排除

这些参数完全可选,因此您可以包含所有或全部不包含

提及

要检索提及认证用户(@yourhandle)的推文集合,您可以使用 retrieveMentions 方法。

<?php
use Snaggle\Client\Credentials\AccessCredentials;
use Snaggle\Client\Credentials\ConsumerCredentials;
use Wheedle\TwitterClient;
use Wheedle\Tweet;
use Wheedle\Exceptions\RateLimitExceededException;
use Wheedle\Exceptions\UnauthorizedRequestException;
use \RuntimeException;

$accessToken = new AccessCredentials('YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_SECRET');

$consumerToken = new ConsumerCredentials('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');

$client = new TwitterClient($accessToken, $consumerToken);

$tweet = new Tweet($client);

try {

    $data = $tweet->retrieveMentions();

} catch (RuntimeException $e) {
    // handle Runtime Exception
} catch (RateLimitExceededException $e) {
    // handle rate limit exceeded exception
} catch (UnauthorizedRequestException $e) {
    // handle unauthorized request
}

此方法的可选参数如下:

  • count 整数 返回推文数量,最多 200 条
  • since_id 整数 返回 ID 比提供的 ID 更新的结果
  • max_id int 返回ID早于提供ID的结果
  • trim_user boolean 当为true时,返回仅包含ID的用户对象
  • contributor_details boolean 当为true时,增强响应中的贡献者元素
  • include_entities boolean 当设置为false时,将排除实体节点

首页时间线

检索所有关注用户的推文集合

<?php
use Snaggle\Client\Credentials\AccessCredentials;
use Snaggle\Client\Credentials\ConsumerCredentials;
use Wheedle\TwitterClient;
use Wheedle\Tweet;
use Wheedle\Exceptions\RateLimitExceededException;
use Wheedle\Exceptions\UnauthorizedRequestException;
use \RuntimeException;

$accessToken = new AccessCredentials('YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_SECRET');

$consumerToken = new ConsumerCredentials('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');

$client = new TwitterClient($accessToken, $consumerToken);

$tweet = new Tweet($client);
try {

    $data = $tweet->retrieveHomeTimeline();

} catch (RuntimeException $e) {
    // handle Runtime Exception
} catch (RateLimitExceededException $e) {
    // handle rate limit exceeded exception
} catch (UnauthorizedRequestException $e) {
    // handle unauthorized request
}

此方法的可选参数如下:

  • count 整数 返回推文数量,最多 200 条
  • since_id 整数 返回 ID 比提供的 ID 更新的结果
  • max_id int 返回ID早于提供ID的结果
  • trim_user boolean 当为true时,返回仅包含ID的用户对象
  • contributor_details boolean 当为true时,增强响应中的贡献者元素
  • include_entities boolean 当设置为false时,将排除实体节点

用户时间线

检索所有您的推文的时序

<?php
use Snaggle\Client\Credentials\AccessCredentials;
use Snaggle\Client\Credentials\ConsumerCredentials;
use Wheedle\TwitterClient;
use Wheedle\Tweet;
use Wheedle\Exceptions\RateLimitExceededException;
use Wheedle\Exceptions\UnauthorizedRequestException;
use \RuntimeException;

$accessToken = new AccessCredentials('YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_SECRET');

$consumerToken = new ConsumerCredentials('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');

$client = new TwitterClient($accessToken, $consumerToken);

$tweet = new Tweet($client);

try {

    $data = $tweet->retrieveUserTimeline();

} catch (RuntimeException $e) {
    // handle Runtime Exception
} catch (RateLimitExceededException $e) {
    // handle rate limit exceeded exception
} catch (UnauthorizedRequestException $e) {
    // handle unauthorized request
}

此方法的可选参数如下:

  • count 整数 返回推文数量,最多 200 条
  • since_id 整数 返回 ID 比提供的 ID 更新的结果
  • max_id int 返回ID早于提供ID的结果
  • trim_user boolean 当为true时,返回仅包含ID的用户对象
  • contributor_details boolean 当为true时,增强响应中的贡献者元素
  • include_entities boolean 当设置为false时,将排除实体节点

我的推文 - 被其他人转发的

检索被其他用户转发的推文列表

<?php
use Snaggle\Client\Credentials\AccessCredentials;
use Snaggle\Client\Credentials\ConsumerCredentials;
use Wheedle\TwitterClient;
use Wheedle\Tweet;
use Wheedle\Exceptions\RateLimitExceededException;
use Wheedle\Exceptions\UnauthorizedRequestException;
use \RuntimeException;

$accessToken = new AccessCredentials('YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_SECRET');

$consumerToken = new ConsumerCredentials('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');

$client = new TwitterClient($accessToken, $consumerToken);

$tweet = new Tweet($client);

try {

    $data = $tweet->retrieveMyRetweets();

} catch (RuntimeException $e) {
    // handle Runtime Exception
} catch (RateLimitExceededException $e) {
    // handle rate limit exceeded exception
} catch (UnauthorizedRequestException $e) {
    // handle unauthorized request
}

此方法的可选参数如下:

  • count 整数 返回推文数量,最多 200 条
  • since_id 整数 返回 ID 比提供的 ID 更新的结果
  • max_id int 返回ID早于提供ID的结果
  • trim_user boolean 当为true时,返回仅包含ID的用户对象
  • include_user_entities boolean 当设置为false时,将排除用户实体节点
  • include_entities boolean 当设置为false时,将排除实体节点

检索转推

检索单个推文的所有转推账户。

<?php
use Snaggle\Client\Credentials\AccessCredentials;
use Snaggle\Client\Credentials\ConsumerCredentials;
use Wheedle\TwitterClient;
use Wheedle\Tweet;
use Wheedle\Exceptions\RateLimitExceededException;
use Wheedle\Exceptions\UnauthorizedRequestException;
use \RuntimeException;

$accessToken = new AccessCredentials('YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_SECRET');

$consumerToken = new ConsumerCredentials('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');

$client = new TwitterClient($accessToken, $consumerToken);

$tweet = new Tweet($client);

try {

    $data = $tweet->retrieveRetweets(12345324);

} catch (RuntimeException $e) {
    // handle Runtime Exception
} catch (RateLimitExceededException $e) {
    // handle rate limit exceeded exception
} catch (UnauthorizedRequestException $e) {
    // handle unauthorized request
}

此方法的可选参数如下:

  • count 整数 返回推文数量,最多 200 条
  • trim_user boolean 当为true时,返回仅包含ID的用户对象

发送推文

创建新的推文并将其发布到您的时间轴

<?php
use Snaggle\Client\Credentials\AccessCredentials;
use Snaggle\Client\Credentials\ConsumerCredentials;
use Wheedle\TwitterClient;
use Wheedle\Tweet;
use Wheedle\Exceptions\RateLimitExceededException;
use Wheedle\Exceptions\UnauthorizedRequestException;
use \RuntimeException;

$accessToken = new AccessCredentials('YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_SECRET');

$consumerToken = new ConsumerCredentials('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');

$client = new TwitterClient($accessToken, $consumerToken);

$tweet = new Tweet($client);

try {

    $data = $tweet->create(['status' => 'This is a brand new tweet']);

} catch (RuntimeException $e) {
    // handle Runtime Exception
} catch (RateLimitExceededException $e) {
    // handle rate limit exceeded exception
} catch (UnauthorizedRequestException $e) {
    // handle unauthorized request
}

此方法的可选参数如下:

  • in_reply_to_status_id int 您要回复的推文ID,必须@提及原始作者
  • possibly_sensitive boolean 当推文包含裸露、暴力或其他令人厌恶的内容时,应设置此选项
  • lat float 纬度
  • long float 经度
  • place_id string 世界上某个地方
  • display_coordinates boolean 当为true时,将在推文发送的确切坐标上放置一个标记
  • trim_user boolean 当为true时,返回仅包含ID的用户对象
  • media_ids string 要关联到推文的媒体ID列表

转推现有推文

将推文转发到您的时间轴

<?php
use Snaggle\Client\Credentials\AccessCredentials;
use Snaggle\Client\Credentials\ConsumerCredentials;
use Wheedle\TwitterClient;
use Wheedle\Tweet;
use Wheedle\Exceptions\RateLimitExceededException;
use Wheedle\Exceptions\UnauthorizedRequestException;
use \RuntimeException;

$accessToken = new AccessCredentials('YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_SECRET');

$consumerToken = new ConsumerCredentials('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');

$client = new TwitterClient($accessToken, $consumerToken);

$tweet = new Tweet($client);

try {

    $data = $tweet->retweet(12312432);

} catch (RuntimeException $e) {
    // handle Runtime Exception
} catch (RateLimitExceededException $e) {
    // handle rate limit exceeded exception
} catch (UnauthorizedRequestException $e) {
    // handle unauthorized request
}

此方法的可选参数如下:

  • trim_user boolean 当为true时,返回仅包含ID的用户对象

删除现有推文

我们都会犯错误,对吧?以下是删除这些错误之一的方法...

<?php
use Snaggle\Client\Credentials\AccessCredentials;
use Snaggle\Client\Credentials\ConsumerCredentials;
use Wheedle\TwitterClient;
use Wheedle\Tweet;
use Wheedle\Exceptions\RateLimitExceededException;
use Wheedle\Exceptions\UnauthorizedRequestException;
use \RuntimeException;

$accessToken = new AccessCredentials('YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_SECRET');

$consumerToken = new ConsumerCredentials('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');

$client = new TwitterClient($accessToken, $consumerToken);

$tweet = new Tweet($client);

try {

    $data = $tweet->delete(12312432);

} catch (RuntimeException $e) {
    // handle Runtime Exception
} catch (RateLimitExceededException $e) {
    // handle rate limit exceeded exception
} catch (UnauthorizedRequestException $e) {
    // handle unauthorized request
}

此方法的可选参数如下:

  • trim_user boolean 当为true时,返回仅包含ID的用户对象

直接客户端使用

便捷方法非常棒,它们需要一点额外的时间来设置,但确实可以使访问API变得更加容易。现实是,并不是每个端点都会有便捷方法来覆盖,所以本节将要详细介绍如何使用 TwitterClient 来进行所有必要的调用。

如果我们看一个简单的例子,应该很容易看出这些调用是如何制作的。假设我们想检索ID为 1234567 的推文。显然,使用便捷类和方法,我们只需要实例化一个新的 Tweet 实例,然后调用带有id的检索方法。使用客户端,几乎同样简单。

<?php
use Snaggle\Client\Credentials\AccessCredentials;
use Snaggle\Client\Credentials\ConsumerCredentials;
use Wheedle\TwitterClient;
use Wheedle\Tweet;
use Wheedle\Exceptions\RateLimitExceededException;
use Wheedle\Exceptions\UnauthorizedRequestException;
use \RuntimeException;

$accessToken = new AccessCredentials('YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_SECRET');

$consumerToken = new ConsumerCredentials('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');

$client = new TwitterClient($accessToken, $consumerToken);

$status = $client->get('statuses/show/1234567.json')

当然,我们仍然可以向这个调用添加可选参数,所以如果我们看看上面的 $client->get 调用,我们可以演示添加这些参数是多么简单。

$params = ['trim_user' => true, 'include_entities' => true];
$status = $client->get('statuses/show/1234567.json', $params);

作为选择,您也可以使用 http_build_query 自己构建查询字符串,但是 TwitterClient::getTwitterClient::post 接口被构建成可以相同方式使用。还重要的是要注意,便捷方法将删除该端点不支持的所有选项。直接使用客户端时,您必须确保所有使用的可选参数对该端点是可用的。

使用客户端需要对Twitter API端点的工作方式有一定的了解,但阅读文档应该会使一切变得非常容易理解。使用此方法会抛出异常,就像便捷方法一样,所以您会得到相同的目标异常,无论您选择哪种方法。

异常

Wheedle有几种不同的异常类型可能会抛出。这些异常将指示特定调用无法正确完成。调用失败的原因有很多,例如:令牌无效、超过配额或尝试对不存在的资源进行调用。以下是所有可能抛出的异常的描述。

RateLimitExceededException

当特定访问令牌在指定时间段内超过允许的调用次数时,会抛出 RateLimitExceededException。需要注意的是,调用次数和持续时间是由Twitter设置的并维护的。这个异常通常与HTTP状态码 429 Too Many Requests 有关。

UnauthorizedRequestException

当尝试访问不属于当前凭据的访问令牌/密钥的资源时,会抛出UnauthorizedRequestException异常。此异常最常见的原因可能是令牌或令牌密钥输入错误,但它也用于指示已认证的用户没有访问他们尝试访问的资源。此异常通常与HTTP状态码401未授权相关。

MissingResourceException

当调用一个没有资源的端点时,会抛出MissingResourceException异常。这可能是因为ID输入错误、拼写错误或其他一些文书错误。始终检查并确保您正确地输入了端点及其后续可选参数非常重要。这对应于HTTP状态码404未找到

TooManyCooksException

TooManyCooksException主要是为了有趣而加入的。它不是必须使用的,也不会直接抛出。它可以在捕获块中用来代替RateLimitExceededException。明确地说,我实际上不推荐使用此异常。它描述性较差,可能会引起混淆。我加入它是因为我想,并且觉得很有趣。RateLimitExceededException也将是一种TooManyCooksException类型。您可以根据自己的需要进行处理。