navneetrai/laravel-submitter

基于OAuth的身份验证器和Laravel 5.2的文件提交器

1.0.7 2016-10-20 05:55 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:04:08 UTC


README

Build Status Coverage Status Total Downloads Latest Stable Version Latest Unstable Version License

laravel-submitter是一个简单的Laravel 5库,用于上传媒体(视频和图片),并将状态更新和网站链接添加到Facebook、Twitter和Youtube等热门社交网站的用户账户。

此库还有助于获取用户身份验证令牌,这些令牌可用于延迟提交。

支持的服务

该库支持Facebook、Twitter和Youtube。更多服务将很快实现。

包含的服务实现

  • Facebook
  • Twitter
  • Youtube
  • 更多即将到来!

安装

将laravel-submitter添加到composer.json文件中

"require": {
  "navneetrai/laravel-submitter": "^1.0"
}

使用composer安装此包。

$ composer update

注册包

在config/app.php中的providers数组内注册服务提供者

'providers' => [
  // ...
  
  Userdesk\Submission\SubmissionServiceProvider::class,
]

在config/app.php中的aliases数组内添加别名

'aliases' => [
  // ...
  
  'Submission'     => Userdesk\Submission\Facades\Submission::class,
]

配置

配置laravel-submitter有两种方式。

选项1

使用Artisan命令创建包的配置文件

$ php artisan vendor:publish --provider="Userdesk\Submission\SubmissionServiceProvider"

选项2

在config目录下手动创建配置文件config/subscription.php并将以下代码放入其中。

<?php

return [

	/*
	|--------------------------------------------------------------------------
	| Submission Config
	|--------------------------------------------------------------------------
	*/

	/**
	 * Services
	 */
	'services' => [

		'facebook' => [
			'client_id'     => '',
			'client_secret' => '',
			'scope'         => ['email', 'public_profile', 'publish_actions'],
		],

		'twitter' => [
		    'client_id'     => '',
		    'client_secret' => '',
		    // No scope - oauth1 doesn't need scope
		],

		'youtube' => [
		    'client_id'     => '',
		    'client_secret' => '',
		    'scope'         => [
							    'profile', 'email',
							    'https://www.googleapis.com/auth/youtube',
								'https://www.googleapis.com/auth/youtube.upload',
								'https://www.googleapis.com/auth/youtube.readonly'
								],
		],

	]

];

凭证

将您的凭证添加到config/submission.php(取决于您选择的配置选项)

使用

基本用法

只需按照以下步骤操作,您就可以获取提交器实例

$submitter = Submission::submitter('twitter');

如果您调用的服务不存在或者缺少该服务的配置,您将得到一个SubmissionException

将用户重定向到网站进行身份验证

要开始身份验证过程,您可以调用提交器实例的authenticate方法

$submitter = Submission::submitter($website);
return $submitter->authenticate($state);

您还应该向此方法传递一个整数作为$state。该变量将作为您的请求的唯一标识符,您可以在以后用于存储用户身份验证令牌。

您将获得一个重定向响应,该响应将用户重定向到网站进行身份验证。

完成提交

用户身份验证是一个基于OAuth的兩步驟過程。此外,认证过程因网站而异。此包旨在封装这些差异并提供统一接口,适用于OAuth 1网站(如Twitter)和OAuth 2网站(如Facebook)。

为此,您需要在app\Http目录下的routes.php文件中添加一个命名路由,以便自动处理OAuth重定向。

Route::get('/any-base-url-of-your-liking/{website}/{state?}', ['as'=>'package.Userdesk.submission.authenticate', 'uses'=>'YourSubmissionController@authenticate']);

您可以为每个网站设置重定向URL为http://your-website-host.com/any-base-url-of-your-liking/website-name

因此,如果我们假设您的网站托管地址为http://www.example.com并且您使用authenticate作为基础URL,那么在您的Facebook开发人员配置文件中,您应该将重定向URL设置为http://www.example.com/authenticate/facebook

上述方法将在身份验证后自动将用户重定向到我们的命名路由。

要完成认证过程,YourSubmissionController中的authenticate函数应如下所示

public function authenticate(Request $request, String $website, int $state = 0){
	$submitter = Submission::submitter($website);
	try{
		$credentials = $submitter->completeAuthentication($request, $state);
	}catch(InvalidTokenException $e){
		//Check configuration variables.
	}catch(InvalidPrivilegeException $e){
		//Flash message to user that he needs to provide required privileges for submission to be successful.
	}
	

	//Fetch Information from Credentials Object

	$state = $credentials->getState();
	$user = $credentials->getUser();

	$username = $user->getId();		
	$info = $user->getProfile();

	$token = $credentials->getToken();
	$tokenArray = $token->getTokenArray();

	//You can now save tokenArray to your database for later use
}

如果您在调用authenticate方法之前未定义路由package.Userdesk.submission.authenticate,您将得到一个MissingRouteException

如果由于配置原因认证过程失败,您将收到一个 InvalidTokenException。如果用户未提供提交所需的权限,您将收到一个 InvalidPrivilegeException。在这种情况下,您可以通知用户他必须提供所需的权限。

使用存储令牌上传项目

您可以使用上面存储的令牌提交媒体并在目标网站上推送更新。为此,您首先需要创建一个提交对象并将其存储的令牌添加到其中。

$submitter = Submitter::submitter($website);
	
$token = new SubmissionToken();
$token->addTokenArray($tokenArray);

$submitter->addToken($token);

如果您尝试上传项目而不添加存储的令牌,您将收到一个 MissingTokenException。如果令牌已过期或被用户撤销,则您将收到一个 InvalidTokenException

此库还旨在统一不同网站API抛出的不同异常。如果目标网站API生成异常,您将收到一个 InvalidUploadException

上传视频

您可以使用上面存储的令牌使用此代码在目标网站上提交视频

try{
	$submitter = Submitter::submitter($website);
	
	$token = new SubmissionToken();
	$token->addTokenArray($tokenArray);

	$video = new SubmissionVideoItem($title, $description, $localThumb, $localVideo, $keywords);

	$submitter->addToken($token);
	$result = $submitter->uploadVideo($video);

	$status = $result->getStaus();
	$url = $result->getUrl();	
}catch(InvalidUploadException $e){
	Log::error($e->getMessage());
}

关键字应该是逗号分隔的字符串。并非所有网站都使用关键字进行视频提交。

每个网站都有自己的视频上传政策。您的视频应遵守网站政策才能成功上传。

例如,Twitter的视频不能超过30秒

要上传视频,您需要将一个 SubmissionVideoItem 传递给 uploadVideo 方法。

使用存储令牌提交图片

您可以使用上面存储的令牌使用此代码在目标网站上提交图片

$submitter = Submitter::submitter($website);

try{	
	$token = new SubmissionToken();
	$token->addTokenArray($tokenArray);

	$image = new SubmissionImageItem($title, $description, $localImage, $keywords);

	$submitter->addToken($token);
	$result = $submitter->uploadImage($image);
	
	$status = $result->getStaus();
	$url = $result->getUrl();
}catch(InvalidUploadException $e){
	Log::error($e->getMessage());
}			

关键字应该是逗号分隔的字符串。并非所有网站都使用关键字进行图片提交。

一些网站,如YouTube,不支持图片上传。

每个网站都有自己的图片上传政策。您的图片应遵守网站政策才能成功上传。

要上传图片,您需要将一个 SubmissionImageItem 传递给 uploadImage 方法。

使用存储令牌提交链接

您可以使用上面存储的令牌使用此代码在目标网站上提交链接

$submitter = Submitter::submitter($website);

try{	
	$token = new SubmissionToken();
	$token->addTokenArray($tokenArray);

	$link = new SubmissionLinkItem($title, $description, $link, $keywords);

	$submitter->addToken($token);
	$result = $submitter->addLink($link);
	
	$status = $result->getStaus();
	$url = $result->getUrl();
}catch(InvalidUploadException $e){
	Log::error($e->getMessage());
}			

关键字应该是逗号分隔的字符串。目前只有Facebook支持链接提交。

每个网站都有自己的链接提交政策。您的链接应遵守网站政策才能成功上传。

要上传链接,您需要将一个 SubmissionLinkItem 传递给 addLink 方法。

使用存储令牌添加状态更新/推文

您可以使用上面存储的令牌使用此代码在目标网站上添加状态更新/推文

$submitter = Submitter::submitter($website);

try{	
	$token = new SubmissionToken();
	$token->addTokenArray($tokenArray);

	$update = new SubmissionStatusItem($title, $status, $keywords);

	$submitter->addToken($token);
	$result = $submitter->addStatus($update);
	
	$status = $result->getStaus();
	$url = $result->getUrl();
}catch(InvalidUploadException $e){
	Log::error($e->getMessage());
}			

一些网站,如YouTube,不支持状态更新。

每个网站都有自己的状态更新政策。您的链接应遵守网站政策才能成功上传。

例如,Twitter需要状态更新在140个字符以内。

要添加状态更新,您需要将一个 SubmissionStatusItem 传递给 addStatus 方法。