xpro/proxy-manager

Symfony 扩展包,用于解析、不断更新和提供代理

dev-master / 1.0.x-dev 2019-05-01 07:07 UTC

This package is not auto-updated.

Last update: 2024-09-20 19:31:31 UTC


README

Proxy manager 是一个用于解析、不断更新和提供代理的 Symfony 扩展包

快速开始

安装

  1. 运行命令 composer require xpro/proxy-manager
  2. 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)(如果您需要多个代理地址)。