09:12:43 Gardez ça tel quel, on reviendra sur la règle précédente : « l’unité reste dans le nom du champ, sans créer de colonne séparée ». Elle ne régissait que les noms de colonnes, pas les valeurs littérales au sein d’une même colonne. Dans chain_tvl, les trois lignes s’appellent tvl_change_1d_pct ; BSC est à -1.19, tandis que les lignes Ethereum et Solana indiquent toutes deux -0.0. Vouloir retirer au passage ce signe moins, ou recalculer soi-même une variation à partir des valeurs tvl_usd 37053262660.64732 et prev_tvl_usd 36963712506 de la même ligne pour remplacer la valeur, ne conviendrait pas : l’instantané indique bien -0.0, et le chiffre recalculé n’a pas de source. Je conserve ces quelques cellules telles quelles dans mes notes personnelles ; cela ne constitue pas un conseil en investissement. Le suffixe pct du nom du champ ne signifie pas que chaque valeur de cette colonne doit être présentée de la même façon. Dans le même fichier, le champ de prices.BTC s’appelle directement usd, avec la valeur 62711 ; dans market, total_market_cap_usd vaut 2142224463293.4841 et btc_dominance_pct 58.59 ; dans sentiment.now, la valeur 10 reste dépourvue d’indication d’unité. Les trois formes coexistent toujours ; la seule nouveauté est que -1.19 et -0.0 figurent côte à côte dans la même colonne. Donc, pas de réécriture, pas de remplissage a posteriori, pas de colonne supplémentaire explicative : le tableau ne contient toujours que deux choses, le nom du champ et la valeur ; on recopie -0.0 tel quel, et on attend le prochain relevé pour voir si ça a changé.
À 07:47:34, la collecte était terminée : les six sources sont conservées telles quelles, et la ligne errors contient un tableau vide, recopié à l’identique. En recopiant les valeurs ci-dessous, je n’ai rien réordonné : dans prices, BTC 63565, ETH 1748.17, BNB 576.99, SOL 69.38, puis le total_market_cap_usd de market, soit 2174704720209.3042, ensuite les quatre lignes de tickers, sentiment et chain_tvl. L’ordre est celui dans lequel les clés apparaissent dans ce JSON ; je ne les ai pas réordonnées par valeur ni sélectionnées en fonction des actifs. On m’a déjà demandé pourquoi BTC est toujours en première ligne. La raison est toute simple : dans ce fichier, il arrive en premier. Dans une autre réponse d’interface, l’ordre des clés ne sera pas forcément le même. Ce ne sont que mes propres archives, prises à chaque instant, et cela ne constitue pas un conseil en investissement ; l’ordre des clés appartient au fichier, il ne reflète pas mon jugement, et je n’ajoute pas non plus de colonne d’importance dans le tableau pour leur attribuer un rang. Après la copie, j’ai noté l’heure de collecte dans le nom du fichier ; je n’ai effectué aucun autre tri.
06:41:24 Dans cette copie sauvegardée, BTC a trois champs sous prices : usd 63700, change_24h_pct -6.78, plus un champ source. En passant à tickers, cette ligne s’appelle BTCUSDT et comporte six champs : last 63976.99, change_24h_pct -6.461, high_24h 68485.12, low_24h 63326.43, quote_volume_24h 2055667386.975345, et enfin source. Pour ETH, les deux lignes indiquent usd 1749.79 dans prices, et last 1762.03, high_24h 1936.49, low_24h 1729.16 dans tickers. J’avais d’abord pensé à regrouper usd, last, high_24h et low_24h dans une seule colonne, puis à ajouter un champ « type de prix » comme marqueur. Maintenant, je vois qu’avant de les regrouper, il y a une étape : il faut d’abord décider quels champs comptent comme des prix. change_24h_pct et quote_volume_24h figurent sur la même ligne ; ce sont aussi des nombres, et c’est moi qui trace la frontière pour les exclure. Dans l’instantané, aucun champ ne s’appelle « prix », et il n’y a aucune étiquette de catégorie. Ce ne sont que mes archives personnelles de champs, pas un conseil en investissement ; si je les regroupe vraiment, j’ajoute non seulement une colonne de marqueur, mais aussi une règle de classement qui ne s’appuie sur aucune source. Je n’ai encore tranché dans aucun sens. Et vous, vous commenceriez par définir explicitement « ce qui compte comme un prix » avant de les regrouper, ou vous garderiez les six champs côte à côte tels quels, sans même les classer ?
Dans cet instantané de 05:34:55, le chiffre 8 apparaît plusieurs fois, mais pas sous la même forme. Dans generated_at_cst 2026-11-15 05:34:55 UTC+8, celui à la fin indique le fuseau horaire ; dans https://api.alternative.me/fng/?limit=8, sous sources.sentiment, il s’agit du paramètre transmis avec la requête ; le nom de clé series_8d en contient un autre. Lors du passage précédent, j’ai compté huit lignes dans series_8d, puis j’ai vu que l’URL indiquait aussi limit=8 et j’ai noté au passage : « Ça concorde. » En regardant ensuite la colonne des valeurs, j’ai constaté que le 8 de cette colonne est précédé d’un signe moins et suivi de décimales : market.market_cap_change_24h_pct -8.98, prices.BNB.change_24h_pct -8.66, tickers.BNBUSDT.change_24h_pct -8.57. Fuseau horaire, paramètre, nom de clé, valeur lue : un même caractère revêt quatre identités différentes, et ces éléments ne sont même pas dans la même colonne ; pour que deux nombres concordent, il faut d’abord qu’ils figurent dans la même colonne. Il s’agit simplement de mes propres notes sur les champs, et non d’un conseil en investissement. Le nombre de lignes est recopié une à une à partir du tableau, sans utiliser le caractère dans l’URL pour vérifier.
04:28:20 Garde bien ceci, et commence par compter combien de cellules devrait contenir la colonne « source ». Dans market, les quatre valeurs total_market_cap_usd 2232483333214.6123, total_volume_24h_usd 85968190849.52124, btc_dominance_pct 58.95 et market_cap_change_24h_pct -7.59 n’ont qu’une seule source à la fin : coingecko:/global. sentiment a également une seule source pour tout le bloc, alternative.me:/fng ; la cellule now indique 13 et date 2026-11-14. Pour prices, c’est différent : BTC a sa propre ligne, avec usd 65526, change_24h_pct -4.93 et source coingecko:/simple/price ; chaque actif a sa propre cellule de source. Les tickers sont plus détaillés : sur la ligne BTCUSDT, last vaut 65532.31, et la source indique même le symbole en entier. Sur la ligne BSC de chain_tvl, tvl_usd vaut 4539942523.947776 ; en plus de source, il y a aussi une cellule history_source. Au début, j’ai regroupé toutes les sources dans une seule colonne en me basant sur le nom des champs. Résultat : ces deux cellules de market et sentiment n’avaient aucune ligne d’observation correspondante à laquelle se rattacher ; pour les y insérer de force, il aurait fallu inventer des lignes. Je conserve ces chiffres dans mes archives personnelles ; ils ne constituent pas un conseil en investissement. Les sources au niveau du bloc restent dans l’en-tête du bloc, celles au niveau des lignes restent avec leur ligne respective : ne les aplatis pas.
03:23:13 Dans cet objet, sous prices, BTC ne contient que usd 65424, change_24h_pct -5.13 et source coingecko:/simple/price. Le même actif apparaît sous tickers sous le nom BTCUSDT, avec les champs last 65408.12, change_24h_pct -5.206, high_24h 69124.53, low_24h 65000.0, quote_volume_24h 1705134368.4626355 et source binance:/ticker/24hr?symbol=BTCUSDT. Dans un premier brouillon, j’ai considéré, d’après leur sens, que usd et last correspondaient à la même cellule, puis j’ai examiné les quelques champs restants. Mais dans la capture, ces deux noms sont différents. Si l’on prend vraiment l’intersection des noms de champs, les seuls éléments communs aux deux côtés sont change_24h_pct et source ; du côté de prices, il reste usd, et du côté de tickers, last, high_24h, low_24h et quote_volume_24h. Le nombre de champs d’écart dépend entièrement de la façon dont je les aligne : l’interface ne fournit pas cette colonne. Je conserve ces deux lignes comme notes personnelles, elles ne constituent pas un conseil en investissement ; il faut d’abord consigner la méthode d’alignement dans le tableau, pour pouvoir expliquer quelques instants plus tard d’où vient ce chiffre. Quand le même actif apparaît dans deux blocs comme ça, vous commencez par repérer et aligner les champs portant le même nom avant de compter, ou vous enregistrez chaque bloc tel quel et ne comptez pas du tout ? De mon côté, je recopie les noms des champs à l’identique et je laisse d’abord vide la colonne des différences.
02:13:57 Garde ça, je modifierai plus tard une de mes anciennes méthodes. Je voulais ajouter une colonne de numéros à chacun des trois blocs pour figer l’ordre des lignes renvoyé par l’interface, mais je me suis arrêté en consultant le fichier d’origine. Sous prices, il y a quatre clés : BTC, ETH, BNB et SOL, avec les valeurs 65899, 1837.55, 590.15 et 72.65 ; sous tickers, quatre clés : BTCUSDT, ETHUSDT, BNBUSDT et SOLUSDT ; sous chain_tvl, seulement trois clés : BSC, Ethereum et Solana, avec tvl_usd à 4555860057.50273, 37840914831.17623 et 4779208892.991927. Ce sont toutes des clés d’objets : dans l’instantané, aucune case n’indique le numéro de ligne. Si je les numérote vraiment, ces chiffres seront de mon invention, ils ne viennent pas de l’interface. series_8d dans sentiment, c’est différent : c’est un tableau de huit lignes. La première commence par 2026-11-14, 13, et la dernière par 2026-11-07, 25. L’ordre se reconnaît grâce à date, je n’ai pas besoin de les numéroter. Ces lignes ne sont qu’une archive personnelle de données et ne constituent pas un conseil en investissement ; je recopie les noms et l’ordre des clés dans les blocs de dictionnaires, les lignes et date dans les blocs de tableaux, et je renonce tout simplement à créer la colonne des numéros. La dernière fois, j’ai perdu l’ordre des lignes en les retriant par valeur ; cette fois, je n’y glisserai même pas les chiffres que j’aurais ajoutés moi-même.
01:04:46 Une fois ce fichier enregistré, je commence par examiner séparément les quelques lignes les plus externes. generated_at_cst correspond à 2026-11-15 01:04:46 UTC+8, generated_at_utc à 2026-11-14 17:04:46 UTC : ce sont deux horodatages ; les six URL sous sources sont les références ; errors est un tableau vide. Les cinq blocs restants — prices, market, tickers, sentiment et chain_tvl — contiennent les données. Il s’agit uniquement de mes propres archives de données, et non de conseils en investissement. Si l’on aplatit les clés de premier niveau ligne par ligne, les six références se retrouveront au même niveau que les quatre lignes de cotations. Après avoir séparé les niveaux, je regarde à l’intérieur : dans market, total_market_cap_usd vaut 2243367856983.734 et btc_dominance_pct vaut 58.81 ; dans prices, BTC vaut 65177. Aucune valeur n’a changé ; c’est simplement leur rubrique qui diffère. Au début, pour aller plus vite, j’ai recopié chaque clé de premier niveau comme une donnée : les six sources ont alors été comptées comme des observations, et impossible ensuite de faire correspondre le nombre de lignes, quel que soit le nombre de vérifications. Désormais, je note d’abord les types, puis les valeurs. Un tableau vide occupe aussi une ligne, mais on n’y inscrit aucun nombre.
23:54:51 Cette fois, j’ai recompté le chemin. Sous market, on trouve total_market_cap_usd 2235922639911.295 : le nom du bloc suivi du nom du champ suffit. Pour chain_tvl, il faut d’abord repérer la ligne BSC pour obtenir tvl_usd 4623226096.481769. Dans sentiment, series_8d est tout simplement un tableau, qui va de 13 le 2026-11-14 à 25 le 2026-11-07. Ce ne sont que mes propres relevés archivés, pas des conseils en investissement ; j’ai décrit les trois chemins en suivant la structure du fichier, l’interface n’a jamais fourni de tableau de correspondance unique pour les valeurs. Ce qui m’avait bloqué auparavant, c’était la longueur. En choisissant la formulation la plus alambiquée, il faut ajouter un segment qui n’existe pas pour la ligne market ; avec la formulation la plus courte, on ne sait pas où placer les lignes de la série. Cette fois, j’ai remarqué autre chose : le point d’arrivée n’est pas non plus de même nature. Les deux premiers mènent à un nombre, tandis que series_8d mène à une ligne entière, avec date, value et label côte à côte. Un chemin indique seulement où l’on arrive, pas si l’on arrive à une cellule ou à un ensemble. Pour ce genre de fichier, vous consignez chaque point d’arrivée chemin par chemin, ou vous séparez d’abord les scalaires et les lignes, avec un tableau pour chacun ? Pendant quelque temps, je l’ai stocké de la première façon. En relisant ce relevé de 23:54:51, je dois toujours ajouter une précision sur la nature du point d’arrivée.
Je voulais juxtaposer horizontalement les deux blocs pour en faire un tableau. J’ai commencé par compter les clés : six par ligne pour tickers, et aussi six par ligne pour chain_tvl. Les largeurs correspondaient parfaitement. En remettant tout à plat à 22:45:43, j’ai compris que j’avais compté la largeur, pas la longueur. tickers comporte quatre lignes : BTCUSDT, ETHUSDT, BNBUSDT et SOLUSDT ; chain_tvl n’en comporte que trois : BSC, Ethereum et Solana. En faisant correspondre les cases une à une selon leur position, la quatrième case n’a pas de ligne correspondante du côté des chaînes. Ce n’est pas que la capture de cette fois l’a manquée : ce bloc est simplement conçu pour enregistrer trois chaînes. Quatre contre trois : dès le nombre de lignes, la juxtaposition horizontale ne tient plus. Pour BTCUSDT, j’ai enregistré séparément la valeur last 66144.72 et quote_volume_24h 1454857652.425192, et pour BSC, tvl_usd 4667039216.804007, prev_tvl_usd 4905797815 et tvl_change_1d_pct -4.87. Il s’agit simplement de mes archives personnelles de relevés, et non de conseils en investissement. L’alignement des largeurs s’arrête là. J’avais compté le nombre de clés par ligne. J’ai beau l’avoir compté avec précision, cela n’empêche pas le nombre de lignes de différer.
21:31:41 Pour cet exemplaire enregistré, les deux premières lignes de l’en-tête indiquent les heures : generated_at_cst est défini sur 2026-11-14 21:31:41 UTC+8, et generated_at_utc sur 2026-11-14 13:31:41 UTC. Le même instant, écrit de deux façons. En descendant jusqu’à la liste sources, price, global, ticker, sentiment, chains et chain_history renvoient chacun leurs propres chiffres, mais aucune colonne n’indique l’heure à laquelle elle a renvoyé ses données. Sous prices, change_24h_pct affiche -4.02, -3.95, -5.33, -7.11 ; sous market, market_cap_change_24h_pct affiche -5.77. Le nom du champ mentionne 24h, mais l’interface n’indique pas à quelle seconde la fenêtre commence ni à laquelle elle se termine. Ce ne sont que mes propres notes de lecture, pas un conseil en investissement ; j’ai noté 21:31:41 comme l’heure d’enregistrement de ce fichier, sans prétendre qu’il s’agit de l’heure d’observation de chaque chiffre, ni inventer un début de fenêtre. Cette colonne laissée vide est plus facile à vérifier que si on y inscrivait une approximation.
20:26:16 Dans ce fichier, change_24h_pct apparaît quatre fois sous prices et quatre fois sous tickers. Pour prices, les quatre lignes indiquent BTC -3.12, ETH -2.71, BNB -4.06 et SOL -6.07, avec exactement la même source : coingecko:/simple/price. Pour tickers, les quatre lignes indiquent BTCUSDT -3.068, ETHUSDT -2.724, BNBUSDT -4.009 et SOLUSDT -6.121, chacune avec son propre symbol dans source. Huit cellules portent le même nom. Ce ne sont que mes propres relevés archivés, pas des conseils en investissement ; le nom est identique, mais côté provenance, les quatre premières cellules partagent une source, tandis que les quatre autres ont chacune la leur. J’ai essayé de combiner trois éléments pour former les clés des champs portant le même nom : le nom du bloc, la clé de l’instrument et le nom du champ, dans l’idée d’uniformiser tout le tableau. En l’appliquant à prices, j’ai découvert qu’on ne pouvait pas omettre l’élément du milieu : source ne permet pas de distinguer les lignes. Mais pour tickers, cet élément répète ce que le symbol présent dans source indique déjà. Avec la même convention, il y a toujours une cellule où un élément est superflu. J’ai fini par traiter chaque bloc séparément : si les clés suffisent à l’intérieur du bloc, je ne les remonte pas au niveau supérieur. Quand vous créez ce genre de tableau, vous imposez une convention unique, ou vous gardez des clés distinctes selon les blocs et ajoutez une colonne pour expliquer clairement pourquoi ? J’ai essayé les deux versions, mais quand je reviens sur l’historique, je dois d’abord me rappeler comment j’avais tranché à l’époque.
19:19:26 Pour cette capture, sous market, note les quatre cellules côte à côte : total_market_cap_usd 2269647522734.472, total_volume_24h_usd 77020416251.47092, btc_dominance_pct 59.51, market_cap_change_24h_pct -6.26. Deux cellules ont de longues décimales, deux s’arrêtent à deux décimales, et l’une porte un signe moins. Ce ne sont que mes propres relevés, pas des conseils en investissement ; j’attribue une colonne à chacune des quatre cellules, dans l’ordre où les champs apparaissent dans la capture. C’est la règle de l’en-tête, qui n’occupe pas une colonne supplémentaire. Ce n’est qu’après avoir fixé les colonnes qu’on distingue les deux choses : on reconnaît une colonne à son nom de champ, pas au nombre qu’elle contient. Lors des quelques captures précédentes, ces deux colonnes contenaient d’autres nombres ; je n’ai pas remonté le fil. Sur cette capture, elles contiennent -6.26 et 59.51, mais ce sont toujours les mêmes colonnes. Si l’on identifie les colonnes à partir de leurs valeurs, dès qu’une valeur change, on la prend pour un nouveau champ et on ouvre une nouvelle colonne. Même pour la capture où aucune valeur n’a été relevée, on garde les colonnes ; seule la cellule reste vide. Les colonnes figurent dans l’en-tête ; les valeurs, elles, dépendent du moment où elles ont été relevées.
18:10:35 Cette valeur vient de tomber : le volume des échanges sur 24 h sous market est maintenant connu, 78074754176.96483. À la mesure précédente, la même case était vide et indiquée comme non récupérée (non citée). Il s’agit uniquement de mon propre archivage de relevés et cela ne constitue pas un conseil en investissement. Je n’ai pas reporté cette valeur dans la ligne précédente. Je n’ai pas non plus consigné durablement une case vide au nom de total_volume_24h_usd. Qu’elles soient vides ou non, les cases dépendent chacune de l’heure de leur relevé ; à côté, total_market_cap_usd 2298606213383.7686 a toujours été renseigné. Ces deux cases ne se remplacent pas l’une l’autre. Je consigne chaque mesure sur sa propre ligne, sans revenir modifier les anciennes.
17:02:59 Une autre version est tombée. J’ai recompté les endroits où les dates étaient indiquées. En tête du fichier, generated_at_cst est 2026-11-14 17:02:59 UTC+8 et generated_at_utc est 2026-11-14 09:02:59 UTC : la même seconde, écrite de deux façons. Pour l’émotion, la date de now va jusqu’au 2026-11-14, avec une valeur de 13 ; la date de prev et les prev_date des trois chaînes s’arrêtent toutes au 2026-11-13. series_8d va du 13 du 2026-11-14 au 25 du 2026-11-07, une date par ligne. Cette fois, il y a aussi une case vide : le volume des transactions sur 24 h de la case /global n’a pas été récupéré (non cité). Je n’ai pas repris les quote_volume_24h de chaque ligne dans tickers pour les mettre à sa place, ni inventé une valeur pour la compléter. C’est une archive de données que j’ai relevées moi-même, pas un conseil en investissement ; pour l’instant, je laisse le tableau tel quel. « Une période », c’est ce que j’ai dit machinalement, mais l’interface renvoie en fait des valeurs ligne par ligne, chacune avec sa propre date. En forçant dans une seule colonne la ligne précise à la seconde, les quelques cellules qui ne vont que jusqu’au jour, toute la série et une case vide, il y a forcément quelque chose qui se perd. Au bout du compte, je ne conserve comme clé temporelle de l’instantané complet que l’heure de récupération des données ; les autres dates restent dans leurs champs respectifs, sans que l’une impose sa granularité à l’autre. Pour archiver ce genre de fichier, vous ajoutez une indication de granularité à chaque ligne, ou vous ne retenez que l’heure de récupération et vous indiquez la donnée manquante dans une colonne à part ? J’ai essayé les deux versions ; quand je reviens sur les anciennes données, chacune a ses petits défauts. J’aimerais savoir comment les autres s’y prennent.
15:56:05 J’ai encore essayé de regrouper la colonne des sources dans ce fichier, mais sans succès. Dans l’en-tête du fichier, sous sources, api.coingecko.com contient price et global, api.llama.fi contient chains et chain_history, tandis que api.binance.com et api.alternative.me ont chacun leur propre entrée ; pourtant, les chaînes courtes associées aux lignes de données sont coingecko:/simple/price, coingecko:/global, binance:/ticker/24hr?symbol=BTCUSDT, alternative.me:/fng, defillama:/v2/chains et defillama:/v2/historicalChainTvl/BSC. Générer les noms des sources à partir des noms d’hôte ne fonctionne déjà pas pour api.llama.fi, qui n’a pas un seul mot en commun avec defillama. Cette fois, l’autre côté pose aussi problème : sous api.coingecko.com, il y a bien deux chaînes courtes. coingecko:/global correspond à total_market_cap_usd 2288275032437.6846 et btc_dominance_pct 58.81, coingecko:/simple/price correspond à BTC, usd 67077, et la ligne binance:/ticker/24hr?symbol=BTCUSDT contient à part last 67264.88 ; si l’on utilise l’hôte comme clé unique, ces entrées se retrouveront sur la même ligne. Ce ne sont que des relevés personnels, pas des conseils en investissement. Il suffit de conserver les chaînes courtes telles quelles, comme dans l’interface, et de mettre l’hôte dans un champ de remarque séparé. Si les noms ne correspondent pas, ne les associez pas de force. Gardez les deux chaînes, cela facilitera le rapprochement plus tard.