Plugin Directory

Changeset 3234821


Ignore:
Timestamp:
02/04/2025 02:51:24 PM (13 months ago)
Author:
bikkel
Message:

tagging version 2.3.2

Location:
news-parser
Files:
740 added
14 edited

Legend:

Unmodified
Added
Removed
  • news-parser/trunk/bootstrap.php

    r3231549 r3234821  
    4242    $loading_manager->init();
    4343
     44
     45    $app->middleware->add('NewsParserPlugin\Parser\HTMLParser:parse',array(
     46      $app->DI_container->get(Modifiers\ReplaceRelativePathWithAbsolute::class),
     47      $app->DI_container->get(Modifiers\ImagePrepare::class),
     48      $app->DI_container->get(Modifiers\ReplaceYoutubeFrames::class),
     49      $app->DI_container->get(Modifiers\ReplaceTikTokFrames::class),
     50      $app->DI_container->get(Modifiers\ReplaceVideoSrc::class),
     51      $app->DI_container->get(Modifiers\RemoveStyleTags::class),
     52      $app->DI_container->get(Modifiers\RemoveScriptTags::class),
     53      $app->DI_container->get(Modifiers\RemoveNoScriptTags::class),
     54   ));
     55
     56   
    4457    // Set up modifiers middleware for html parser
    4558   
     
    4962      $app->DI_container->get(Modifiers\ImagePrepare::class),
    5063      $app->DI_container->get(Modifiers\ReplaceYoutubeFrames::class),
     64      $app->DI_container->get(Modifiers\ReplaceTikTokFrames::class),
     65      $app->DI_container->get(Modifiers\RemoveNoScriptTags::class),
     66      $app->DI_container->get(Modifiers\ReplaceVideoSrc::class),
    5167      $app->DI_container->get(Modifiers\RemoveLineBreaks::class)
    5268   ));
  • news-parser/trunk/inc/Config/di-config.php

    r3231549 r3234821  
    1212    Parser\XMLParser::class=>[],
    1313    Parser\HTMLRaw::class=>[],
    14     Parser\HTMLPatternParser::class=>[[new Parser\ParserSyntaxExtenders\TextContent()]],
     14    Parser\DOMParserFactory::class=>[[new Parser\ParserSyntaxExtenders\TextContent()],[new Parser\ParserSyntaxExtenders\DirectChild()]],
     15    Parser\HTMLPatternParser::class=>[Parser\DOMParserFactory::class],
    1516    Models\TemplateModel::class=>[],
    1617    Models\AIOptionsModel::class=>[],
     
    4041    Modifiers\ImagePrepare::class=>[],
    4142    Modifiers\ReplaceYoutubeFrames::class=>[],
     43    Modifiers\RemoveNoScriptTags::class=>[],
     44    Modifiers\ReplaceTikTokFrames::class=>[],
     45    Modifiers\RemoveStyleTags::class=>[],
     46    Modifiers\RemoveScriptTags::class=>[],
     47    Modifiers\ReplaceVideoSrc::class=>[],
    4248    Parser\Modifiers\PostModifiers\AddPostThumbnailModifier::class=>[],
    4349    Controller\PostController::class=>[Parser\HTMLPatternParser::class,Utils\AdapterGuttenberg::class,Models\TemplateModel::class,Models\PostModel::class],
  • news-parser/trunk/inc/Parser/HTMLParser.php

    r3231549 r3234821  
    33
    44use HungCP\PhpSimpleHtmlDom\HtmlDomParser;
    5 
     5use NewsParserPlugin\Parser\DOMParserFactory;
    66
    77
     
    5050     *
    5151     */
    52     public function __construct($cache_expiration = 3600)
     52    public function __construct(DOMParserFactory $dom_parser_factory, $cache_expiration = 3600)
    5353    {
    5454        parent::__construct($cache_expiration);
     55        $this->domParserFactory=$dom_parser_factory;
    5556    }
    5657    /**
     
    248249    protected function removeTags($data, $pattern = '@(<[^>]*>)@')
    249250    {
    250         return preg_replace($pattern, '', $data);
     251        $result=preg_replace($pattern, '', $data);
     252        return $result;
     253
    251254    }
    252255    /**
     
    258261    protected function createDOM($html)
    259262    {
    260         return HtmlDomParser::str_get_html($html);
     263        return $this->domParserFactory->create(HtmlDomParser::str_get_html($html));
    261264    }
    262265}
  • news-parser/trunk/inc/Parser/HTMLPatternParser.php

    r3232762 r3234821  
    33
    44use NewsParserPlugin\Parser\HTMLParser;
     5use NewsParserPlugin\Parser\DOMParserFactory;
    56
    67/**
     
    2021     * @param int              $cache_expiration  Cache expiration time in seconds.
    2122     */
    22     public function __construct($query_extenders = [], $cache_expiration = 3600)
     23    public function __construct(DOMParserFactory $dom_parser_factory, $cache_expiration = 3600)
    2324    {
    2425        $this->query_extenders = $query_extenders;
    25         parent::__construct($cache_expiration);
     26        parent::__construct($dom_parser_factory,$cache_expiration);
    2627    }
    2728
     
    112113                    // Find the YouTube video ID.
    113114                    $video_hash=$el->getAttribute('data-hash');
     115                    $video_type=$el->getAttribute('data-type');
    114116                    // Remove any symbols except those that are allowed.
    115                     $el_data['content'] = $video_hash;
     117                    if(!$video_hash||!$video_type) {
     118                        $el_data['content']=$el->getAttribute('src');
     119                    }else {
     120                        $el_data['content'] = [
     121                            'hash'=> $video_hash,
     122                            'type'=> $video_type,
     123                        ];
     124                    }
     125                    break;
     126                case 'h1':
     127                case 'h2':
     128                case 'h3':
     129                case 'h4':
     130                case 'h5':
     131                case 'h6':
     132                    $el_data['tagName'] = $el_tag;
     133                    $el_data['content'] = $this->removeTags($el->innertext);
     134                    break;
     135                case 'blockquote':
     136                    $el_data['tagName'] = 'blockquote';
     137                    $el_data['content'] = $this->getQuoteData($el);
    116138                    break;
    117139                default:
     
    174196            return $template['elementsTemplate'];
    175197        }
    176         $search_template = '';
     198        $search_template = [];
    177199        if (!$template) {
    178200            throw new \Exception('Parsing template patterns should be set.');
     
    181203            // Create search template for Sunra\HtmlDomParser::find method
    182204            // https://simplehtmldom.sourceforge.io/docs/1.9/manual/finding-html-elements/ How to find HTML elements? section.
    183             $search_template .= $child_element['searchTemplate'] . ',';
    184         }
    185         return substr($search_template, 0, -1);
     205            $search_template[]= $child_element['searchTemplate'];
     206        }
     207        return implode(',',array_unique($search_template));
    186208    }
    187209    /**
     
    246268        return end($array);
    247269    }
     270
     271    protected function getQuoteData($element)
     272    {
     273        $quote_elements=$element->children();
     274       
     275        $quote_text=$this->removeTags($quote_elements[0]->innertext);
     276        $quote_author=$this->removeTags($quote_elements[1]->innertext);
     277        if(count($quote_elements)<3){
     278            $quote_description=$this->removeTags($quote_elements[2]->innertext);
     279        }
     280        return ['text'=>$quote_text,'author'=>$quote_author,'description'=>$quote_description?$quote_description:''];
     281    }
    248282    /**
    249283     * Provide finding elements with extended syntax.
     
    254288    public function find($query, $container_element = null)
    255289    {
    256         if ($this->hasExtededSyntax($query)) {
    257             return $this->findWithExtendedSyntax($query, $container_element);
    258         }
    259         return $container_element ? $container_element->find($query) : parent::find($query);
    260     }
    261     /**
    262      * Check if the query has extended syntax.
    263      *
    264      * @param string $query The query string.
    265      */
    266     protected function hasExtededSyntax($query)
    267     {
    268         if (!count($this->query_extenders)) {
    269             return false;
    270         }
    271         foreach ($this->query_extenders as $extender) {
    272             if ($extender->checkSyntax($query)) {
    273                 return true;
    274             }
    275         }
    276     }
    277     /**
    278      * Remove extended syntax from the query.
    279      *
    280      * @param string $query The query string.
    281      */
    282     protected function removeExtendedSyntax($query)
    283     {
    284         return array_reduce($this->query_extenders, function ($carry, $extender) use ($query) {
    285             return $extender->removeExtendedSyntax($query, $carry);
    286         }, $query);
    287     }
    288     /**
    289      * Find elements with extended syntax.
    290      *
    291      * @param string $query The query string.
    292      *
    293      * @return array The array of elements.
    294      */
    295     protected function findWithExtendedSyntax($query, $container_element)
    296     {
    297         $initElements = $this->find($this->removeExtendedSyntax($query), $container_element);
    298         return array_reduce($this->query_extenders, function ($carry, $extender) use ($query) {
    299             return $extender->find($query, $carry);
    300         }, $initElements);
     290        if (!$container_element) {
     291            $container_element = $this->dom;
     292        }
     293       
     294        return $this->dom->find($query,$container_element);
    301295    }
    302296
  • news-parser/trunk/inc/Parser/Modifiers/AdapterModifiers/Before/GeneratePostBodyWithAI.php

    r3232762 r3234821  
    9595            if ($block['ai']) {
    9696                if($block['element']['content']==='') continue;
    97                 if (is_array($block['element']['content'])) {
    98                     $block['element']['content'] = array_map(function($content) use ($ai_request_options, $prompt, $title) {
    99                         $ai_request_options['messages'][0]['content'] = $this->preparePrompt($prompt, $content, $title);
    100                         return  $this->aiServeceProvider->chat($ai_request_options);
    101                     }, $block['element']['content']);
    102                    
    103                 }  else {
    104                     $ai_request_options['messages'][0]['content'] = $this->preparePrompt($prompt, $block['element']['content'], $title);
    105                     $block['element']['content'] =  $this->aiServeceProvider->chat($ai_request_options);
     97                    if($block['json']){
     98                        $ai_request_options['messages'][0]['content']= $this->preparePrompt($prompt, $block['json'], $title,'json');
     99                    } else {
     100                        $ai_request_options['messages'][0]['content'] = $this->preparePrompt($prompt, $block['element']['content'], $title);
     101                    }
     102                    $output =  $this->aiServeceProvider->chat($ai_request_options);
     103                    if($block['json']){
     104                        $block['element']= $this->decodeJSON($output);
     105                    }else{
     106                        $block['element']['content'] = $output;
     107                    }
    106108                }
     109                $result[]=$block;
    107110            }
    108             $result[]=$block;
    109         }
    110 
    111111        return $result;
    112112    }
     
    119119        return $full_prompt;
    120120    }
    121     protected function preparePrompt($prompt, $post_body, $post_title)
     121    protected function preparePrompt($prompt, $post_body, $post_title, $type='string')
    122122    {
    123123        $full_prompt = str_replace('${post}', $post_body, $prompt);
    124124        $full_prompt = str_replace('${title}', $post_title, $full_prompt);
     125        switch ($type) {
     126            case 'json':
     127                $full_prompt = self::OUTPUT_FORMAT_PROMPT . $full_prompt;
     128                break;
     129        }
    125130        //$full_prompt = str_replace('${headers}', $this->extractHeadins($parsed_data['body']), $full_prompt);
    126131        //$full_prompt = str_replace('${paragraphs}', $this->countParagraphs($parsed_data['body']), $full_prompt);
     
    172177        $contentBlock='';
    173178        foreach ($body as $element) {
    174             if ($element['tagName'] === 'p'||$element['tagName'] === 'span') {
    175                 $contentBlock.=PHP_EOL.$element['content'];
    176             } else if ($element['tagName'] === 'h1' || $element['tagName'] === 'h2' || $element['tagName'] === 'h3' || $element['tagName'] === 'h4') {
    177                 $contentBlock.=PHP_EOL.self::HEADER_SYMBOL.$element['content'].self::HEADER_SYMBOL.PHP_EOL;
    178             } else if ($element['tagName'] === 'li') {
    179                 $contentBlock.=PHP_EOL.'- '.$element['content'];
    180             } else if ($element['tagName'] === 'ol') {
    181                 $contentBlock.=PHP_EOL.'- '.$element['content'];
    182             } else {
    183                 if ($contentBlock!=='') {
    184                     $mergedBody[] =[
     179            switch($element['tagName']) {
     180                case 'p':
     181                    $contentBlock.=PHP_EOL.$element['content'];
     182                    break;
     183                case 'h1':
     184                case 'h2':
     185                case 'h3':
     186                case 'h4':
     187                    $contentBlock.=PHP_EOL.self::HEADER_SYMBOL.$element['content'].self::HEADER_SYMBOL.PHP_EOL;
     188                    break;
     189                case 'li':
     190                    $contentBlock.=PHP_EOL.'- '.$element['content'];
     191                    break;
     192                case 'ol':
     193                case 'ul':
     194                    $contentBlock.=implode(PHP_EOL.'- ',$element['content']);
     195                    break;
     196                default:
     197                    $contentBlock!==''?$mergedBody[] =[
    185198                        'ai'=>true,
    186199                        'element'=>[
     
    188201                            'content'=>$contentBlock
    189202                        ]
     203                    ]:$mergedBody[] =['ai'=>false,
     204                    'element'=>$element
    190205                    ];
    191206                    $contentBlock='';
    192207                }
    193                 $mergedBody[] =['ai'=>false,
    194                     'element'=>$element
    195                 ];
    196             }
    197208        }
    198209        if ($contentBlock!=='') {
     
    212223        $contentBlock='';
    213224        foreach ($body as $element) {
    214             if ($element['tagName'] === 'p'||$element['tagName'] === 'span'||$element['tagName'] === 'div') {
    215                 $mergedBody[] =[
    216                     'ai'=>true,
    217                     'element'=>$element,
    218                 ];
    219             } else if ($element['tagName'] === 'h1' || $element['tagName'] === 'h2' || $element['tagName'] === 'h3' || $element['tagName'] === 'h4') {
    220                 $mergedBody[] =[
    221                     'ai'=>true,
    222                     'element'=>$element
    223                 ];
    224             } else if($element['tagName'] === 'li'||$element['tagName'] === 'ol') {
    225                 $mergedBody[] =[
    226                     'ai'=>true,
    227                     'element'=>$element,
    228                 ];
    229             }else if($element['tagName'] === 'ul') {
    230                 $mergedBody[] =[
    231                     'ai'=>true,
    232                     'element'=>$element,
    233                 ];
    234 
    235             }   else {
    236                 $mergedBody[] =[
    237                     'ai'=>false,
    238                     'element'=>$element
    239                 ];
    240                
    241             }
    242            
    243         }
     225            switch($element['tagName']){
     226                case 'p':
     227                case 'h1':
     228                case 'h2':
     229                case 'h3':
     230                case 'h4':
     231                case 'li':
     232                case 'ol':
     233                case 'ul':
     234                case 'table':
     235                case 'blackquote':
     236                case 'span':
     237                    $mergedBody[] =[
     238                        'ai'=>true,
     239                        'element'=>$element,
     240                        'json'=>$this->encondeToJSON($element)
     241                    ];
     242                break;
     243                default:
     244                    $mergedBody[] =[
     245                        'ai'=>false,
     246                        'element'=>$element
     247                    ];
     248            };
     249        } 
    244250        return $mergedBody;
    245251    }
     
    295301    }
    296302   
    297     public function encondeParagraph($paragraph)
    298     {
    299        
    300         return json_encode($paragraph);
    301     }
    302     public function decodeParagraph($paragraph)
    303     {
    304         $clean_json=str_replace('```json', '', $paragraph);
     303    public function encondeToJSON($el)
     304    {
     305        return json_encode($el);
     306    }
     307    public function decodeJSON($el)
     308    {
     309        $clean_json=str_replace('```json', '', $el);
    305310        return json_decode($clean_json, true);
    306311    }
  • news-parser/trunk/inc/Traits/SanitizeDataTrait.php

    r3231549 r3234821  
    126126                case 'excludeTemplate':
    127127                case 'elementsTemplate':
    128                     $clean_data[$key]=preg_replace('/[^a-zA-Z0-9\=\s\_\-\.\,\]\[\p{L}\*\^\$\!]/u', '', $param);
     128                    $clean_data[$key]=preg_replace('/[^a-zA-Z0-9\=\s\_\-\.\,\>\+\~\]\[\p{L}\*\^\$\!]/u', '', $param);
    129129                    break;
    130130                case 'position':
  • news-parser/trunk/inc/Utils/AdapterGuttenberg.php

    r3232762 r3234821  
    5353                    break;
    5454                case 'video':
    55                     $post_content.=$this->youtubeVideo($el);
     55                    $post_content.=is_array($el['content'])?$this->socialVideo($el):$this->video($el);
    5656                    break;
    5757                case 'imgRow':
     
    6060                case 'source':
    6161                    $post_content.=$this->sourceLink($el);
     62                case 'blockquote':
     63                    $post_content.=$this->blockquote($el);
    6264            }
    6365        }
    6466        return $post_content;
    6567    }
     68   
     69    protected function socialVideo($element)
     70    {
     71        $type=$element['content']['type'];
     72        switch ($type) {
     73            case 'youtube':
     74                return $this->youtubeVideo($element['content']);
     75            case 'tiktok':
     76                return $this->tikTokVideo($element['content']);
     77        }
     78    }
     79    protected function video($element)
     80    {
     81        $src=$element['content'];
     82        $video='<div class="wp-block-embed__wrapper"><video src="%1$s" frameborder="0" allow="accelerometer;  clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></video></div>';
     83            return sprintf(
     84                $video,
     85                \esc_html($src)
     86            );
     87    }
     88    protected function tikTokVideo($element)
     89    {
     90        $hash=$element['hash'];
     91        $video='<!-- wp:embed {"url":"https://www.tiktok.com/embed/v2/%1$s","type":"video","providerNameSlug":"tiktok","className":""} --><figure class="wp-block-embed is-type-video is-provider-tiktok wp-block-embed-tiktok"><div class="wp-block-embed__wrapper"><iframe src="https://www.tiktok.com/embed/v2/%1$s" frameborder="0" height="745" width="325" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe></div></figure><!-- /wp:core-embed/tiktok -->';
     92            return sprintf(
     93                $video,
     94                \esc_html($hash)
     95            );
     96    }
    6697    /**
    6798     * Format youtube video block.
     
    72103    protected function youtubeVideo($element)
    73104    {
    74         $hash=$element['content'];
     105        $hash=$element['hash'];
    75106        /*
    76107        $video='<!-- wp:core-embed/youtube {"url":"https://youtu.be/%1$s","type":"video","providerNameSlug":"youtube","className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"} -->'.
     
    217248        return '<!-- wp:paragraph --><p>'.$link_element.'</p><!-- /wp:paragraph -->';
    218249    }
     250    protected function blockquote($element){
     251        $clean_text=\esc_html($element['content']['text']);
     252        $clean_author=\esc_html($element['content']['author']);
     253
     254        return '<!-- wp:quote --><blockquote><p>'.$clean_text.'</p><cite>'.$clean_author.'</cite></blockquote><!-- /wp:quote -->';
     255    }
    219256}
  • news-parser/trunk/inc/Utils/Chain.php

    r3049937 r3234821  
    4040            return $this->result ?: false;
    4141        }
    42         if (method_exists($this->obj, $method)) {
     42        if (is_callable([$this->obj, $method])) {
    4343            $this->result = $this->result ?: call_user_func_array(array($this->obj, $method), $args);
    4444        } else {
  • news-parser/trunk/news-parser.php

    r3232762 r3234821  
    44Plugin URI: https://www.news-parser.com
    55Description: Parse full text news from RSS Feed
    6 Version: 2.3.1
     6Version: 2.3.2
    77Author: Evgeny S.Zalevskiy <[email protected]>
    88Author URI: https://github.com/zalevsk1y/
     
    1515
    1616
    17 define ('NEWS_PARSER_PLUGIN_VERSION', '2.3.1');
     17define ('NEWS_PARSER_PLUGIN_VERSION', '2.3.2');
    1818define ("NEWS_PARSER_PLUGIN_MODE","production");
    1919
  • news-parser/trunk/readme.txt

    r3232762 r3234821  
    77Requires at least: 5.2.0
    88Tested up to: 6.7.1
    9 Stable tag: 2.3.1
     9Stable tag: 2.3.2
    1010License: MIT
    1111License URI: https://opensource.org/licenses/MIT
     
    171171== Changelog ==
    172172
     173= 2.3.2 - 04-02-25 =
     174
     175* Added: Parsing TikTok embede video
     176* Fix: some bugs.
     177
    173178= 2.3.1 - 31-01-25 =
    174179
  • news-parser/trunk/vendor/composer/autoload_psr4.php

    r3206548 r3234821  
    1010    'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
    1111    'Orhanerday\\OpenAi\\' => array($vendorDir . '/orhanerday/open-ai/src'),
     12    'Http\\Message\\MultipartStream\\' => array($vendorDir . '/php-http/multipart-stream-builder/src'),
    1213    'Http\\Discovery\\' => array($vendorDir . '/php-http/discovery/src'),
    1314    'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
     
    1516    'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
    1617    'Gemini\\' => array($vendorDir . '/google-gemini-php/client/src'),
     18    'DeepSeek\\' => array($vendorDir . '/deepseek-php/deepseek-php-client/src'),
    1719    'ContainerBuilder\\' => array($vendorDir . '/zalevsk1y/container-builder/src'),
     20    'Alle_AI\\Anthropic\\' => array($vendorDir . '/alle-ai/anthropic-api-php/src'),
    1821);
  • news-parser/trunk/vendor/composer/autoload_static.php

    r3206548 r3234821  
    2626        'H' =>
    2727        array (
     28            'Http\\Message\\MultipartStream\\' => 29,
    2829            'Http\\Discovery\\' => 15,
    2930        ),
     
    3536            'Gemini\\' => 7,
    3637        ),
     38        'D' =>
     39        array (
     40            'DeepSeek\\' => 9,
     41        ),
    3742        'C' =>
    3843        array (
    3944            'ContainerBuilder\\' => 17,
     45        ),
     46        'A' =>
     47        array (
     48            'Alle_AI\\Anthropic\\' => 18,
    4049        ),
    4150    );
     
    5463        array (
    5564            0 => __DIR__ . '/..' . '/orhanerday/open-ai/src',
     65        ),
     66        'Http\\Message\\MultipartStream\\' =>
     67        array (
     68            0 => __DIR__ . '/..' . '/php-http/multipart-stream-builder/src',
    5669        ),
    5770        'Http\\Discovery\\' =>
     
    7588            0 => __DIR__ . '/..' . '/google-gemini-php/client/src',
    7689        ),
     90        'DeepSeek\\' =>
     91        array (
     92            0 => __DIR__ . '/..' . '/deepseek-php/deepseek-php-client/src',
     93        ),
    7794        'ContainerBuilder\\' =>
    7895        array (
    7996            0 => __DIR__ . '/..' . '/zalevsk1y/container-builder/src',
     97        ),
     98        'Alle_AI\\Anthropic\\' =>
     99        array (
     100            0 => __DIR__ . '/..' . '/alle-ai/anthropic-api-php/src',
    80101        ),
    81102    );
  • news-parser/trunk/vendor/composer/installed.json

    r3206548 r3234821  
    11{
    22    "packages": [
     3        {
     4            "name": "alle-ai/anthropic-api-php",
     5            "version": "1.3",
     6            "version_normalized": "1.3.0.0",
     7            "source": {
     8                "type": "git",
     9                "url": "https://github.com/Alle-AI/anthropic-api-php.git",
     10                "reference": "8b2927e434e7d113e5afe8734de90a19c5959273"
     11            },
     12            "dist": {
     13                "type": "zip",
     14                "url": "https://api.github.com/repos/Alle-AI/anthropic-api-php/zipball/8b2927e434e7d113e5afe8734de90a19c5959273",
     15                "reference": "8b2927e434e7d113e5afe8734de90a19c5959273",
     16                "shasum": ""
     17            },
     18            "require": {
     19                "ext-curl": "*",
     20                "php": "^7.4 || ^8.0"
     21            },
     22            "time": "2024-03-11T05:42:12+00:00",
     23            "type": "library",
     24            "installation-source": "dist",
     25            "autoload": {
     26                "psr-4": {
     27                    "Alle_AI\\Anthropic\\": "src/"
     28                }
     29            },
     30            "notification-url": "https://packagist.org/downloads/",
     31            "license": [
     32                "MIT"
     33            ],
     34            "authors": [
     35                {
     36                    "name": "Dickson Agyei",
     37                    "email": "[email protected]",
     38                    "homepage": "https://www.linkedin.com/in/dickson-agyei-jnr/",
     39                    "role": "Developer"
     40                }
     41            ],
     42            "description": "A PHP library for interacting with Anthropic's API",
     43            "homepage": "https://github.com/Alle-AI/anthropic-api-php",
     44            "keywords": [
     45                "alle-ai",
     46                "anthropic",
     47                "chatbot",
     48                "claude",
     49                "text-generation"
     50            ],
     51            "support": {
     52                "issues": "https://github.com/Alle-AI/anthropic-api-php/issues",
     53                "source": "https://github.com/Alle-AI/anthropic-api-php/tree/1.3"
     54            },
     55            "install-path": "../alle-ai/anthropic-api-php"
     56        },
    357        {
    458            "name": "caophihung94/php-simple-html-dom-parser",
     
    56110        },
    57111        {
     112            "name": "deepseek-php/deepseek-php-client",
     113            "version": "2.0.0",
     114            "version_normalized": "2.0.0.0",
     115            "source": {
     116                "type": "git",
     117                "url": "https://github.com/deepseek-php/deepseek-php-client.git",
     118                "reference": "a0c246e06b3191ed4bfb27ef550911887513d03b"
     119            },
     120            "dist": {
     121                "type": "zip",
     122                "url": "https://api.github.com/repos/deepseek-php/deepseek-php-client/zipball/a0c246e06b3191ed4bfb27ef550911887513d03b",
     123                "reference": "a0c246e06b3191ed4bfb27ef550911887513d03b",
     124                "shasum": ""
     125            },
     126            "require": {
     127                "php": "^8.1.0",
     128                "php-http/discovery": "^1.20.0",
     129                "php-http/multipart-stream-builder": "^1.4.2",
     130                "psr/http-client": "^1.0.3",
     131                "psr/http-client-implementation": "^1.0.1",
     132                "psr/http-factory-implementation": "*",
     133                "psr/http-message": "^1.1.0|^2.0.0"
     134            },
     135            "require-dev": {
     136                "guzzlehttp/guzzle": "^7.9.2",
     137                "guzzlehttp/psr7": "^2.7.0",
     138                "laravel/pint": "^1.18.1",
     139                "mockery/mockery": "^1.6.12",
     140                "nunomaduro/collision": "^7.11.0|^8.5.0",
     141                "pestphp/pest": "^2.36.0|^3.5.0",
     142                "pestphp/pest-plugin-arch": "^2.7|^3.0",
     143                "pestphp/pest-plugin-type-coverage": "^2.8.7|^3.1.0",
     144                "phpstan/phpstan": "^1.12.7",
     145                "roave/security-advisories": "dev-latest",
     146                "symfony/var-dumper": "^6.4.11|^7.1.5"
     147            },
     148            "time": "2025-01-31T22:27:43+00:00",
     149            "type": "library",
     150            "installation-source": "dist",
     151            "autoload": {
     152                "psr-4": {
     153                    "DeepSeek\\": "src/"
     154                }
     155            },
     156            "notification-url": "https://packagist.org/downloads/",
     157            "license": [
     158                "MIT"
     159            ],
     160            "authors": [
     161                {
     162                    "name": "deepseek-php",
     163                    "email": "[email protected]",
     164                    "role": "owner"
     165                },
     166                {
     167                    "name": "Omar Alalwi",
     168                    "email": "[email protected]",
     169                    "role": "creator"
     170                }
     171            ],
     172            "description": "deepseek PHP client is a robust and community-driven PHP client library for seamless integration with the Deepseek API, offering efficient access to advanced AI and data processing capabilities.",
     173            "homepage": "https://github.com/deepseek-php/deepseek-php-client",
     174            "keywords": [
     175                "ai",
     176                "ai-api",
     177                "ai-client-library",
     178                "ai-sdk",
     179                "api",
     180                "api-integration",
     181                "api-wrapper",
     182                "client",
     183                "deepseek",
     184                "deepseek-ai",
     185                "deepseek-api",
     186                "developer-tools",
     187                "generative-ai",
     188                "llm",
     189                "machine-learning",
     190                "natural-language-processing",
     191                "nlp",
     192                "openai",
     193                "openai-alternative",
     194                "php",
     195                "php-ai-integration",
     196                "php-api-client",
     197                "php-sdk",
     198                "qwen",
     199                "rest-client",
     200                "sdk",
     201                "text-generation"
     202            ],
     203            "support": {
     204                "issues": "https://github.com/deepseek-php/deepseek-php-client/issues",
     205                "source": "https://github.com/deepseek-php/deepseek-php-client/tree/v2.0.0"
     206            },
     207            "install-path": "../deepseek-php/deepseek-php-client"
     208        },
     209        {
    58210            "name": "google-gemini-php/client",
    59             "version": "1.0.14",
    60             "version_normalized": "1.0.14.0",
     211            "version": "1.0.15",
     212            "version_normalized": "1.0.15.0",
    61213            "source": {
    62214                "type": "git",
    63215                "url": "https://github.com/google-gemini-php/client.git",
    64                 "reference": "11e7413b231dd2ab7ca6169f780d6cc4eeae41a1"
    65             },
    66             "dist": {
    67                 "type": "zip",
    68                 "url": "https://api.github.com/repos/google-gemini-php/client/zipball/11e7413b231dd2ab7ca6169f780d6cc4eeae41a1",
    69                 "reference": "11e7413b231dd2ab7ca6169f780d6cc4eeae41a1",
     216                "reference": "6dca9a5e6a6de39b230fe4593a8d041efd02e34e"
     217            },
     218            "dist": {
     219                "type": "zip",
     220                "url": "https://api.github.com/repos/google-gemini-php/client/zipball/6dca9a5e6a6de39b230fe4593a8d041efd02e34e",
     221                "reference": "6dca9a5e6a6de39b230fe4593a8d041efd02e34e",
    70222                "shasum": ""
    71223            },
     
    82234                "phpstan/phpstan": "^1.10"
    83235            },
    84             "time": "2024-11-06T17:51:13+00:00",
     236            "time": "2024-12-29T12:53:49+00:00",
    85237            "type": "library",
    86238            "installation-source": "dist",
     
    117269            "support": {
    118270                "issues": "https://github.com/google-gemini-php/client/issues",
    119                 "source": "https://github.com/google-gemini-php/client/tree/1.0.14"
     271                "source": "https://github.com/google-gemini-php/client/tree/1.0.15"
    120272            },
    121273            "install-path": "../google-gemini-php/client"
     
    600752        },
    601753        {
     754            "name": "php-http/multipart-stream-builder",
     755            "version": "1.4.2",
     756            "version_normalized": "1.4.2.0",
     757            "source": {
     758                "type": "git",
     759                "url": "https://github.com/php-http/multipart-stream-builder.git",
     760                "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e"
     761            },
     762            "dist": {
     763                "type": "zip",
     764                "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/10086e6de6f53489cca5ecc45b6f468604d3460e",
     765                "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e",
     766                "shasum": ""
     767            },
     768            "require": {
     769                "php": "^7.1 || ^8.0",
     770                "php-http/discovery": "^1.15",
     771                "psr/http-factory-implementation": "^1.0"
     772            },
     773            "require-dev": {
     774                "nyholm/psr7": "^1.0",
     775                "php-http/message": "^1.5",
     776                "php-http/message-factory": "^1.0.2",
     777                "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
     778            },
     779            "time": "2024-09-04T13:22:54+00:00",
     780            "type": "library",
     781            "installation-source": "dist",
     782            "autoload": {
     783                "psr-4": {
     784                    "Http\\Message\\MultipartStream\\": "src/"
     785                }
     786            },
     787            "notification-url": "https://packagist.org/downloads/",
     788            "license": [
     789                "MIT"
     790            ],
     791            "authors": [
     792                {
     793                    "name": "Tobias Nyholm",
     794                    "email": "[email protected]"
     795                }
     796            ],
     797            "description": "A builder class that help you create a multipart stream",
     798            "homepage": "http://php-http.org",
     799            "keywords": [
     800                "factory",
     801                "http",
     802                "message",
     803                "multipart stream",
     804                "stream"
     805            ],
     806            "support": {
     807                "issues": "https://github.com/php-http/multipart-stream-builder/issues",
     808                "source": "https://github.com/php-http/multipart-stream-builder/tree/1.4.2"
     809            },
     810            "install-path": "../php-http/multipart-stream-builder"
     811        },
     812        {
    602813            "name": "psr/http-client",
    603814            "version": "1.0.3",
  • news-parser/trunk/vendor/composer/installed.php

    r3206548 r3234821  
    44        'pretty_version' => 'dev-master',
    55        'version' => 'dev-master',
    6         'reference' => '5ce2b81538b6203741df1185c7b253d6d8c4485d',
     6        'reference' => '1b2c43b1433bcd3554af8397d24d0a404e7d5880',
    77        'type' => 'library',
    88        'install_path' => __DIR__ . '/../../',
     
    1111    ),
    1212    'versions' => array(
     13        'alle-ai/anthropic-api-php' => array(
     14            'pretty_version' => '1.3',
     15            'version' => '1.3.0.0',
     16            'reference' => '8b2927e434e7d113e5afe8734de90a19c5959273',
     17            'type' => 'library',
     18            'install_path' => __DIR__ . '/../alle-ai/anthropic-api-php',
     19            'aliases' => array(),
     20            'dev_requirement' => false,
     21        ),
    1322        'caophihung94/php-simple-html-dom-parser' => array(
    1423            'pretty_version' => 'v1.7.3',
     
    2029            'dev_requirement' => false,
    2130        ),
     31        'deepseek-php/deepseek-php-client' => array(
     32            'pretty_version' => '2.0.0',
     33            'version' => '2.0.0.0',
     34            'reference' => 'a0c246e06b3191ed4bfb27ef550911887513d03b',
     35            'type' => 'library',
     36            'install_path' => __DIR__ . '/../deepseek-php/deepseek-php-client',
     37            'aliases' => array(),
     38            'dev_requirement' => false,
     39        ),
    2240        'google-gemini-php/client' => array(
    23             'pretty_version' => '1.0.14',
    24             'version' => '1.0.14.0',
    25             'reference' => '11e7413b231dd2ab7ca6169f780d6cc4eeae41a1',
     41            'pretty_version' => '1.0.15',
     42            'version' => '1.0.15.0',
     43            'reference' => '6dca9a5e6a6de39b230fe4593a8d041efd02e34e',
    2644            'type' => 'library',
    2745            'install_path' => __DIR__ . '/../google-gemini-php/client',
     
    5977            'pretty_version' => 'dev-master',
    6078            'version' => 'dev-master',
    61             'reference' => '5ce2b81538b6203741df1185c7b253d6d8c4485d',
     79            'reference' => '1b2c43b1433bcd3554af8397d24d0a404e7d5880',
    6280            'type' => 'library',
    6381            'install_path' => __DIR__ . '/../../',
     
    95113            'dev_requirement' => false,
    96114        ),
     115        'php-http/multipart-stream-builder' => array(
     116            'pretty_version' => '1.4.2',
     117            'version' => '1.4.2.0',
     118            'reference' => '10086e6de6f53489cca5ecc45b6f468604d3460e',
     119            'type' => 'library',
     120            'install_path' => __DIR__ . '/../php-http/multipart-stream-builder',
     121            'aliases' => array(),
     122            'dev_requirement' => false,
     123        ),
    97124        'psr/http-client' => array(
    98125            'pretty_version' => '1.0.3',
Note: See TracChangeset for help on using the changeset viewer.