PHP Classes

File: examples/map_ids.php

Recommend this page to a friend!
  Packages of Saurabh Gayali   Uniprot PHP Class   examples/map_ids.php   Download  
File: examples/map_ids.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Uniprot PHP Class
Access a UniProt Protein sequence REST API.
Author: By
Last change:
Date: 2 months ago
Size: 4,582 bytes
 

Contents

Class file image Download
<?php
declare(strict_types=1);

/**
 * Example 3: ID Mapping
 *
 * Shows how to submit ID mapping jobs, poll for completion,
 * and retrieve results using UniProt's async job model.
 *
 * Run from command line: php examples/map_ids.php
 */

require_once dirname(__DIR__) . '/src/autoload.php';

use
UniProtPHP\Http\HttpClientFactory;
use
UniProtPHP\Http\CurlClient;
use
UniProtPHP\UniProt\UniProtIdMapping;
use
UniProtPHP\Exception\UniProtException;

// Disable SSL verification for development/testing
CurlClient::setVerifySSL(false);

echo
"=== UniProt ID Mapping Example ===\n\n";

try {
   
// Create HTTP client
   
$httpClient = HttpClientFactory::create();
    echo
"Using transport: " . $httpClient->getTransportName() . "\n\n";

   
// Create mapping object
   
$mapping = new UniProtIdMapping($httpClient);

   
// Example 1: Simple submit and wait
   
echo "1. Submitting ID mapping job (UniProtKB ? Ensembl)...\n";
    echo
" Mapping: P05067, P12345\n";
   
   
$jobId = $mapping->submitAndWait(
       
'UniProtKB_AC-ID',
       
'Ensembl',
        [
'P05067', 'P12345'],
       
null, // no taxId filter
       
2, // poll every 2 seconds
       
30 // max 30 polls (1 minute)
   
);
   
    echo
" Job ID: {$jobId}\n";
    echo
" Status: COMPLETED\n\n";

   
// Example 2: Get results
   
echo "2. Retrieving mapping results...\n";
   
$results = $mapping->getResults($jobId);
   
    if (isset(
$results['results'])) {
        foreach (
$results['results'] as $mapping_result) {
            echo
" " . $mapping_result['from'] . " ? ";
            if (isset(
$mapping_result['to']['id'])) {
                echo
$mapping_result['to']['id'];
            } else {
                echo
"NOT MAPPED";
            }
            echo
"\n";
        }
    }
   
    if (isset(
$results['failedIds']) && !empty($results['failedIds'])) {
        echo
" Failed IDs: " . implode(', ', $results['failedIds']) . "\n";
    }
    echo
"\n";

   
// Example 3: Get job details
   
echo "3. Retrieving job details...\n";
   
$details = $mapping->getDetails($jobId);
    echo
" From DB: " . $details['from'] . "\n";
    echo
" To DB: " . $details['to'] . "\n";
    echo
" Input IDs: " . $details['ids'] . "\n";
    echo
"\n";

   
// Example 4: Different mapping (UniProtKB ? Ensembl with different IDs)
   
echo "4. Submitting another mapping (UniProtKB ? Gene_Name)...\n";
   
$jobId2 = $mapping->submitAndWait(
       
'UniProtKB_AC-ID',
       
'Gene_Name',
        [
'P05067'],
       
null,
       
2,
       
30
   
);
   
   
$results2 = $mapping->getResults($jobId2);
    if (isset(
$results2['results']) && !empty($results2['results'])) {
        echo
" Mapping result: ";
        echo
$results2['results'][0]['from'] . " ? " . $results2['results'][0]['to'];
        echo
"\n";
    }
    echo
"\n";

   
// Example 5: Manual submit and poll (more control)
   
echo "5. Manual submit and poll workflow...\n";
   
$jobId3 = $mapping->submit(
       
'UniProtKB_AC-ID',
       
'Ensembl',
        [
'P12345']
    );
    echo
" Submitted job: {$jobId3}\n";

   
// Manual polling
   
$pollCount = 0;
   
$maxPolls = 20;
   
    while (
$pollCount < $maxPolls) {
       
$status = $mapping->status($jobId3);
       
        if (isset(
$status['jobStatus'])) {
            echo
" Poll {$pollCount}: Status = " . $status['jobStatus'] . "\n";
           
            if (
$status['jobStatus'] === 'FINISHED') {
                echo
" Job completed!\n";
                break;
            }
        } else if (isset(
$status['results'])) {
            echo
" Results ready!\n";
            break;
        }
       
       
sleep(2);
       
$pollCount++;
    }
   
    if (
$pollCount >= $maxPolls) {
        echo
" WARNING: Job still pending after timeout\n";
    }
    echo
"\n";

   
// Example 6: Stream results
   
echo "6. Retrieving results via stream...\n";
   
$streamResults = $mapping->streamResults($jobId);
   
    if (isset(
$streamResults['results']) && !empty($streamResults['results'])) {
        echo
" Retrieved " . count($streamResults['results']) . " mappings via stream\n";
    }
    echo
"\n";

    echo
"? All ID mapping examples completed successfully!\n";

} catch (
UniProtException $e) {
    echo
"? Error: " . $e->getDetailedMessage() . "\n";
    if (
$e->getHttpStatus() > 0) {
        echo
" HTTP Status: " . $e->getHttpStatus() . "\n";
    }
    exit(
1);
} catch (
Exception $e) {
    echo
"? Unexpected error: " . $e->getMessage() . "\n";
    echo
$e->getTraceAsString() . "\n";
    exit(
1);
}