# Dizoloadurezh ar velioù en gwir amzer : penaos diskouez anezhi en ur programma?

> Diskouezit dizoloadurezh ar velioù gant API ROOTE : amzer stagañ, nevezder, kentelioù dianav, hizivadur ha roadennoù kozh en ho programma.

Source: https://www.roote.ai/br/guides/disponibilite-velos-en-vrai-tems-kenlabour-ober-e-barzhoneg/
Language: br
Author: ROOTE

Evit diskouez dizoloadurezh ar velioù e gwir amzer en ur programm, stouit an niver m’eo bet roet gant e nevezder hag aotreet ar priz evit mont gant an treid. Un enklask a lavar petra a zistroas an direr e un eur; n’eo ket garanti e vo vel all war lec’h ma voat.

Ar c’hontrat gwelet ROOTE a eskemmo etre stalioù, treidien stag ha stadioù anezho. Ret eo d’ar etrefas diskouez ar disheñvelderoù-se hep krec’hiañ etre doare dianav, stal dizoloadet ha mirdi a zo e-bras ket kavet.

## Distageñ ur stal diouzh ur treid stag

Un stal a c’hell diskouez niveroù velioù ha lec’hioù da zistroa. Ur treid stag en deus ur stad dizoloadur hag hini all a c’hell bezañ kavet. Diwallit ne vefe ket kontet ur stal evel ur vel pe ouzhpennañ niveroù a zo e-barzh un stock heverk.

Er DTO ROOTE a veze evit gwelet, availability.bikes ha availability.docks a c’hell bezañ dianav. Maezioù diwar-benn an druilh pe batrier a rank bezañ diskouezet nemet ma vezont evit gwir ha ez eus titouroù a-kontrakt.

[Kontrol OpenAPI ROOTE](https://api.roote.ai/openapi.json)

## Lenn nevezder ha amzer stagañ

| Maez | Dijinadur |
| --- | --- |
| freshness.state | Stad embannet : nevez, kozh, dianav pe statik |
| freshness.source_updated_at | Deiziad hizivadur ar servi |
| freshness.received_at | Deiziad derou a zek en arvest |
| freshness.expires_at | Amzer dilennad, ma vez anavezhet |
| availability.bikes | Niver anavezhet pe lakad dianav |
| pickup.enabled ha pickup.state | Titouroù diwar-benn ar priz evit kemeret ur vel e stal |

Amzer ho galv n’eo ket e gwir amzer an enklask. Ur respont d’ho galv da 10e c’hell bezañ hizivad en 9e45. Na ziskouezit ket « hizivad bremañ » nemet war ar poent-se hepken.

## Sellout ouzh stadioù diskouez disheñvel

| Road roet | Diskoulmañ a ranker |
| --- | --- |
| Niver anavezhet ha roadenn nevez | Niver gwelet hag eskemmoù amzer |
| Niver a zo 0 | N’eus ket vel gwelet, gant e amzer kontet |
| Niver null | Dizoloadurezh dianav |
| Stad kozh pe amzer troet | Road kozh; kinnig hizivadur |
| pickup.enabled=false | Mont d’ur vel n’eo ket arzhus e spite d’ur niver galloudus |
| Fazi e klask | Dizoloadurezh a zo n’eo ket kavet e gwir amzer, hep tapout da zero |

N’eo ket mat derc’hel un dianav pe ur stad statik evel nevez. Ur mirdi evit frammañ a c’hell bezañ kreñv met ar niver a c’hell anavezout. Dalc’hit ivez a-benn ar c’houlennoù evit ar respont-mañ.

## Ur skouer eus ur normalizadur a-raok diskoulmañ

Ar yezh dres a ro ur stad diskoulmañ da ur stal roet gant ar pleg ROOTE. N’eo ket ur pacadur hollek evit gwirlec’hiañ ar respontoù. Ar gerioù gwelet a rank bezañ bet kavet er c’hemennadenn eus ho etrefas.

```
function availabilityView(station, now = Date.now()) {
  const freshness = station.freshness;
  const expiresAt = freshness.expires_at
    ? Date.parse(freshness.expires_at) : null;
  const expired = expiresAt !== null &&
    Number.isFinite(expiresAt) && expiresAt <= now;
  if (station.pickup.enabled === false ||
      station.pickup.state === 'unavailable_now') {
    return { state: 'pickup_unavailable', count: null };
  }
  if (expired || freshness.state === 'stale') {
    return { state: 'stale', count: null };
  }
  const count = station.availability.bikes;
  if (freshness.state !== 'fresh' || count === null ||
      !Number.isFinite(count) || count < 0) {
    return { state: 'unknown', count: null };
  }
  return {
    state: count === 0 ? 'empty' : 'observed', count,
    sourceUpdatedAt: freshness.source_updated_at,
    receivedAt: freshness.received_at,
    pickupState: station.pickup.state
  };
}
```

Hag-herv eo ur stad gwelet, na cheñchet ket pickupState=unknown da priz gwiriekaet. Niver ar velioù a chom heverk. Diskouezit ar reizhiad priz ma sikour ho produ evit dibab ur stal.

## Hizivañ hep merkiañ kalz alies

Kemmañ hizivadenn hervez amzer ar finn da vervel, reolennoù an diouer hag emzalc’h an implijer. Unaniezh ar c’houladoù heverk, diread al lec’hioù dilec’hiet hag nullañ ar c’houladoù keenet all mouez ganti.

Un emsav lec’hel ne zegas ket gwirvezh d’ar servizi. Goude ur fazi, gant ho programm e c’hellit derc’hel en ur enklask kozh da zisplegañ anezhi evel kozh. Na gannozit ket an diforc’h-se d’ar wech kentañ ma c’haller gwelet adarre hag ar servij a zo kozh c’hoazh.

## Kavet an darempred gant GBFS

GBFS a ginnig ar servijoù lennegel partiet hag o stadioù. Ur gontent direct a rank lenn al roadennoù, ar rummad ha amzer stagañ ar goulenn. Gant un API normalizet implijit ar c’hontrat hag ez apeze ket un maez GBFS na vez kavet er respont.

[Dibab etre GTFS, GTFS Realtime ha GBFS](https://www.roote.ai/br/guides/gtfs-gtfs-rt-ha-gbfs-pehiniou-piv-ruz-e/)

## Klask ar c’haseoù a c’hall bezañ tawel dezhañ ar lennour

Klaskit ur zero gwir, ur c’henderc’h dianav, un amzer diweredek, ur priz distaget ha fazi goude ur respont mat. Gwiriit ivez amezegioù horarioù diskoulmañ. Niver a zo dreist ebet evit produiñ « vel evezhiañ » ha dizoloadur n’eo ket distaget evit diskouezur zero dizhet.

[Merour an talaouoù goullo ha fazioù](https://www.roote.ai/br/guides/kemmadur-ha-fall-dapi-ere-diferensa/)

[Implij ar reolennoù-se en ur vichennaoueg IA](https://www.roote.ai/br/guides/krouid-unan-hendad-kened-mobilite-war-urtunad-ur-anez/)

[Kinnig da implijer evit kavout ur vel](https://www.roote.ai/br/guides/pellgomz-war-rouaned-rod-difr-dourdrouz-kemoueziou/)

## Goulennouioù droidigezhel

### Niver dreist a garante un vel da'm iziliad ?

Nann. Diskouez ur c’henderc’h, a c’hell cheñch etre klask ha iziliad.

### Gallout a reer kousket null gant zero?

Nann. Null a zispleg un darempred dianav; zero zo niver anavezhet hag a zo un doare all.

### Ret eo hizivañ bep un nebeud eilennvezh?

Implijit ar pezh graet evit gwirvezh, al lezenn servij hag ezhommoù ho lezenn. Ur frekañs start n’eo ket en em vodañ ar servij e nevezder brasoc’h.
