All Projects → rize → Uritemplate

rize / Uritemplate

Licence: mit
PHP URI Template (RFC 6570) supports both URI expansion & extraction

Projects that are alternatives of or similar to Uritemplate

3D Ground Segmentation
A ground segmentation algorithm for 3D point clouds based on the work described in “Fast segmentation of 3D point clouds: a paradigm on LIDAR data for Autonomous Vehicle Applications”, D. Zermas, I. Izzat and N. Papanikolopoulos, 2017. Distinguish between road and non-road points. Road surface extraction. Plane fit ground filter
Stars: ✭ 55 (-82.26%)
Mutual labels:  extraction
rake
A Java library for Rapid Automatic Keyword Extraction (RAKE) 🍂
Stars: ✭ 23 (-92.58%)
Mutual labels:  extraction
Table-Detection-Extraction
Detect the tables in a form and extract the tables as well as the cells of the tables.
Stars: ✭ 35 (-88.71%)
Mutual labels:  extraction
refinery
Refinery is a tool to extract and transform semi-structured data from Excel spreadsheets of different layouts in a declarative way.
Stars: ✭ 30 (-90.32%)
Mutual labels:  extraction
extraction
Tree Extraction for JavaScript Object Graphs
Stars: ✭ 70 (-77.42%)
Mutual labels:  extraction
RDMP
Research Data Management Platform (RDMP) is an open source application for the loading,linking,anonymisation and extraction of datasets stored in relational databases.
Stars: ✭ 20 (-93.55%)
Mutual labels:  extraction
chatnoir-resiliparse
A robust web archive analytics toolkit
Stars: ✭ 26 (-91.61%)
Mutual labels:  extraction
coq-simple-io
IO for Gallina
Stars: ✭ 21 (-93.23%)
Mutual labels:  extraction
Rnightlights
R package to extract data from satellite nightlights.
Stars: ✭ 45 (-85.48%)
Mutual labels:  extraction
Stanford-NER-Python
Stanford Named Entity Recognizer (NER) - Python Wrapper
Stars: ✭ 63 (-79.68%)
Mutual labels:  extraction
trackeddy
Tracking eddy algorithm:
Stars: ✭ 42 (-86.45%)
Mutual labels:  extraction
browser-automation-api
Browser automation API for repetitive web-based tasks, with a friendly user interface. You can use it to scrape content or do many other things like capture a screenshot, generate pdf, extract content or execute custom Puppeteer, Playwright functions.
Stars: ✭ 24 (-92.26%)
Mutual labels:  extraction
SevenZipSharp
Fork of SevenZipSharp on CodePlex
Stars: ✭ 171 (-44.84%)
Mutual labels:  extraction
emot
Open source Emoticons and Emoji detection library: emot
Stars: ✭ 178 (-42.58%)
Mutual labels:  extraction
zauberlehrling
Collection of tools and ideas for splitting up big monolithic PHP applications in smaller parts.
Stars: ✭ 28 (-90.97%)
Mutual labels:  extraction
COVID-19-tracker
北航大数据高精尖中心研究团队进行数据来源的整理与获取,利用自然语言处理等技术从已公开全国4626确诊患者轨迹中抽取了基本信息(性别、年龄、常住地、工作、武汉/湖北接触史等)、轨迹(时间、地点、交通工具、事件)及病患关系形成结构化信息
Stars: ✭ 75 (-75.81%)
Mutual labels:  extraction
ti recover
Appcelerator Titanium APK source code recovery tool
Stars: ✭ 17 (-94.52%)
Mutual labels:  extraction
tabula-sharp
Extract tables from PDF files (port of tabula-java)
Stars: ✭ 38 (-87.74%)
Mutual labels:  extraction
AutoIt-Ripper
Extract AutoIt scripts embedded in PE binaries
Stars: ✭ 101 (-67.42%)
Mutual labels:  extraction
H2PC TagExtraction
A application made to extract assets from cache files of H2v using BlamLib by KornnerStudios.
Stars: ✭ 12 (-96.13%)
Mutual labels:  extraction

PHP URI Template

This is a URI Template implementation in PHP based on RFC 6570 URI Template. In addition to URI expansion, it also supports URI extraction (200+ test cases).

CI Total Downloads

Usage

Expansion

A very simple usage (string expansion).

<?php

use Rize\UriTemplate;

$uri = new UriTemplate();
$uri->expand('/{username}/profile', ['username' => 'john']);

>> '/john/profile'

Rize\UriTemplate supports all Expression Types and Levels specified by RFC6570.

<?php

use Rize\UriTemplate;

$uri = new UriTemplate();
$uri->expand('/search/{term:1}/{term}/{?q*,limit}', [
    'term'  => 'john',
    'q'     => ['a', 'b'],
    'limit' => 10,
])

>> '/search/j/john/?q=a&q=b&limit=10'

/ Path segment expansion

<?php

use Rize\UriTemplate;

$uri = new UriTemplate();
$uri->expand('http://{host}{/segments*}/{file}{.extensions*}', [
    'host'       => 'www.host.com',
    'segments'   => ['path', 'to', 'a'],
    'file'       => 'file',
    'extensions' => ['x', 'y'],
]);

>> 'http://www.host.com/path/to/a/file.x.y'

Rize\UriTemplate accepts base-uri as a 1st argument and default params as a 2nd argument. This is very useful when you're working with API endpoint.

Take a look at real world example.

<?php

use Rize\UriTemplate;

$uri = new UriTemplate('https://api.twitter.com/{version}', ['version' => 1.1]);
$uri->expand('/statuses/show/{id}.json', ['id' => '210462857140252672']);

>> https://api.twitter.com/1.1/statuses/show/210462857140252672.json

Extraction

It also supports URI Extraction (extract all variables from URI). Let's take a look at the example.

<?php

use Rize\UriTemplate;

$uri = new UriTemplate('https://api.twitter.com/{version}', ['version' => 1.1]);

$params = $uri->extract('/search/{term:1}/{term}/{?q*,limit}', '/search/j/john/?q=a&q=b&limit=10');

>> print_r($params);
(
    [term:1] => j
    [term] => john
    [q] => Array
        (
            [0] => a
            [1] => b
        )

    [limit] => 10
)

Note that in the example above, result returned by extract method has an extra keys named term:1 for prefix modifier. This key was added just for our convenience to access prefix data.

strict mode

<?php

use Rize\UriTemplate;

$uri = new UriTemplate();
$uri->extract($template, $uri, $strict = false)

Normally extract method will try to extract vars from a uri even if it's partially matched. For example

<?php

use Rize\UriTemplate;

$uri = new UriTemplate();
$params = $uri->extract('/{?a,b}', '/?a=1')

>> print_r($params);
(
    [a] => 1
    [b] => null
)

With strict mode, it will allow you to extract uri only when variables in template are fully matched with given uri.

Which is useful when you want to determine whether the given uri is matched against your template or not (in case you want to use it as routing service).

<?php

use Rize\UriTemplate;

$uri = new UriTemplate();

// Note that variable `b` is absent in uri
$params = $uri->extract('/{?a,b}', '/?a=1', true);

>>> null

// Now we give `b` some value
$params = $uri->extract('/{?a,b}', '/?a=1&b=2', true);

>>> print_r($params)
(
  [a] => 1
  [b] => 2
)

Array modifier %

By default, RFC 6570 only has 2 types of operators : and *. This % array operator was added to the library because current spec can't handle array style query e.g. list[]=a or key[user]=john.

Example usage for % modifier

<?php

$uri->expand('{?list%,keys%}', [
    'list' => [
        'a', 'b',
    ),
    'keys' => [
        'a' => 1,
        'b' => 2,
    ),
]);

// '?list[]=a&list[]=b&keys[a]=1&keys[b]=2'
>> '?list%5B%5D=a&list%5B%5D=b&keys%5Ba%5D=1&keys%5Bb%5D=2'

// [] get encoded to %5B%5D i.e. '?list[]=a&list[]=b&keys[a]=1&keys[b]=2'
$params = $uri->extract('{?list%,keys%}', '?list%5B%5D=a&list%5B%5D=b&keys%5Ba%5D=1&keys%5Bb%5D=2', )

>> print_r($params);
(
    [list] => Array
        (
            [0] => a
            [1] => b
        )

    [keys] => Array
        (
            [a] => 1
            [b] => 2
        )
)

Installation

Using composer

{
    "require": {
        "rize/uri-template": "~0.3"
    }
}

Changelogs

  • 0.2.0 Add a new modifier % which allows user to use list[]=a&list[]=b query pattern.
  • 0.2.1 Add nested array support for % modifier
  • 0.2.5 Add strict mode support for extract method
  • 0.3.0 Improve code quality + RFC3986 support for extract method by @Maks3w
  • 0.3.1 Improve extract method to parse two or more adjacent variables separated by dot by @corleonis
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].