xpro / proxy-manager
Symfony 扩展包,用于解析、不断更新和提供代理
dev-master / 1.0.x-dev
2019-05-01 07:07 UTC
Requires
- php: >=5.5
- guzzle/guzzle: ~3.9
- symfony/symfony: 2.8.*
This package is not auto-updated.
Last update: 2024-09-20 19:31:31 UTC
README
Proxy manager 是一个用于解析、不断更新和提供代理的 Symfony 扩展包
快速开始
安装
- 运行命令
composer require xpro/proxy-manager
- 将
new Xpro\InformerBundle\XproInformerBundle()
添加到 AppKernel.php 中
添加新的代理解析器
为了与代理一起工作,你必须在你的扩展包中实现代理解析器。你必须至少有一个解析器!它们的位置无关紧要,可以是来自某个 API 或你可以从某些提供免费代理的网站解析。要创建解析器,你需要实现 Xpro\ProxyBundle\Parser\ParserInterface
中的 2 个方法。解析器必须是一个标记为 proxy_parser
标签的服务
示例
这是一个代理解析器的工作示例
namespace YourBundle\Parser\Proxy;
use Goutte\Client;
use Symfony\Component\DomCrawler\Crawler;
use Xpro\ProxyBundle\Parser\ParserInterface;
class HideMeParser implements ParserInterface
{
const NAME = 'Hide Me';
/**
* {@inheritdoc}
*/
public function getProxies()
{
$result = [];
$client = new Client();
$page = $client->request('GET', 'http://hideme.ru/proxy-list/?country=UA#list');
$page->filter('tr')->each(
function (Crawler $node) use (&$result) {
if (strpos($node->html(), '"tdl"')) {
$count = 0;
$res = '';
$node->filter('td')->each(
function (Crawler $nodeTd) use (&$count, &$res) {
if ($count == 0) {
$res = $nodeTd->html();
}
if ($count == 1) {
$res .= ':'.$nodeTd->html();
}
$count++;
}
);
$result[] = $res;
}
}
);
return $result;
}
/**
* {@inheritDoc}
*/
public function getName()
{
return self::NAME;
}
}
在 services.yml 中,你必须定义上述类为标记服务
your_bundle.parser.proxy.hide_me:
class: YourBundle\Parser\Proxy\HideMeParser
tags:
- { name: proxy_parser }
这就结束了!这是所有要求。没有其他代码。我们可以在 your_domain/proxy/parser
路由上看到结果
处理命令
xpro:proxy:parse
- 这个命令将所有启用的解析器的新代理保存到数据库中xpro:proxy:check <url>
- 这个命令检查所有代理,例如xpro:proxy:check 'http://olx.ua'
xpro:proxy:garbage:clear <deadline>
- 这个命令清除在指定时间内不可用的所有代理,例如,要删除 1 天内不可用的所有代理,请运行:xpro:proxy:garbage:clear '1 day'
将命令添加到 crontab
*/5 * * * * root /var/www/postinformer/app/console xpro:proxy:parse
*/5 * * * * root /var/www/postinformer/app/console xpro:proxy:check 'http://olx.ua'
1 */1 * * * root /var/www/postinformer/app/console xpro:proxy:garbage:clear '1 hour'
代理管理
您可以通过 UI 浏览代理列表,观察其活动并启用或禁用您实现的解析器。只需访问 <your_domain>/proxy/parser
路由
访问最新代理
在您的扩展包中,要获取最后一个活跃的代理,您可以使用 xpro_proxy.provider.actual_proxy
服务,并使用 getActualProxy()
方法(如果您只需要一个代理地址)或 getActualProxies($limit)
(如果您需要多个代理地址)。