IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Comment traiteriez vous cette metadata ?


Sujet :

Langage Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 119
    Points : 41 252
    Points
    41 252
    Billets dans le blog
    63
    Par défaut Comment traiteriez vous cette metadata ?
    Bonjour,
    Je m'attaque à woocommerce ou plus exactement à une liaison avec ce type de site.
    J'utilise CData Woocommerce pour interroger les tables (bon le moins que l'on puisse dire c'est que les temps de récupération en debug sont long mais ce n'est pas encore du peaufiné)

    J'ai dans la table customers ce genre de metadata (attention, pas toujours toutes les informations)
    Comment traiteriez vous ça ?

    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    [
      {
        "id": 7300,
        "key": "_yoast_wpseo_profile_updated",
        "value": "1634986206"
      },
      {
        "id": 7322,
        "key": "wm_siret",
        "value": "000000000000000000"
      },
      {
        "id": 7323,
        "key": "wm_customer_code",
        "value": "3001"
      },
      {
        "id": 7324,
        "key": "wm_to_valid",
        "value": "0"
      },
      {
        "id": 7799,
        "key": "billing_pro",
        "value": "1"
      },
      {
        "id": 7802,
        "key": "wpseo_title",
        "value": ""
      },
      {
        "id": 7803,
        "key": "wpseo_metadesc",
        "value": ""
      },
      {
        "id": 7804,
        "key": "wpseo_noindex_author",
        "value": ""
      },
      {
        "id": 7805,
        "key": "wpseo_content_analysis_disable",
        "value": ""
      },
      {
        "id": 7806,
        "key": "wpseo_keyword_analysis_disable",
        "value": ""
      },
      {
        "id": 7808,
        "key": "description_en",
        "value": ""
      },
      {
        "id": 7809,
        "key": "description_de",
        "value": ""
      },
      {
        "id": 7811,
        "key": "facebook",
        "value": ""
      },
      {
        "id": 7812,
        "key": "instagram",
        "value": ""
      },
      {
        "id": 7813,
        "key": "linkedin",
        "value": ""
      },
      {
        "id": 7814,
        "key": "myspace",
        "value": ""
      },
      {
        "id": 7815,
        "key": "pinterest",
        "value": ""
      },
      {
        "id": 7816,
        "key": "soundcloud",
        "value": ""
      },
      {
        "id": 7817,
        "key": "tumblr",
        "value": ""
      },
      {
        "id": 7818,
        "key": "twitter",
        "value": ""
      },
      {
        "id": 7819,
        "key": "youtube",
        "value": ""
      },
      {
        "id": 7820,
        "key": "wikipedia",
        "value": ""
      },
      {
        "id": 8312,
        "key": "wc_last_active",
        "value": "1649808000"
      },
      {
        "id": 9994,
        "key": "shipping_method",
        "value": [
          "dpdfrance_classic"
        ]
      }
    ]

    ce qui m'intéresse : récupérer la valeur des clés "billing_pro" et "wm_customer_code"
    Il y a bien sur la possibilité des expressions régulières.
    Mais, cela ressemble bigrement à du JSON (excepté les sauts de lignes), je me demande donc s'il n'y a pas mieux que les expressions régulières ou la recherche dans une stringlist

    pour info CR/LF et espaces ôtés
    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"id":19836,"key":"_yoast_wpseo_profile_updated","value":"1648044349"},{"id":19858,"key":"wm_siret","value":""},{"id":19859,"key":"wm_customer_code","value":"9424"},{"id":19860,"key":"wm_to_valid","value":"0"},{"id":19862,"key":"billing_pro","value":"1"},{"id":19865,"key":"wpseo_title","value":""},{"id":19866,"key":"wpseo_metadesc","value":""},{"id":19867,"key":"wpseo_noindex_author","value":""},{"id":19868,"key":"wpseo_content_analysis_disable","value":""},{"id":19869,"key":"wpseo_keyword_analysis_disable","value":""},{"id":19871,"key":"description_en","value":""},{"id":19872,"key":"description_de","value":""},{"id":19874,"key":"facebook","value":""},{"id":19875,"key":"instagram","value":""},{"id":19876,"key":"linkedin","value":""},{"id":19877,"key":"myspace","value":""},{"id":19878,"key":"pinterest","value":""},{"id":19879,"key":"soundcloud","value":""},{"id":19880,"key":"tumblr","value":""},{"id":19881,"key":"twitter","value":""},{"id":19882,"key":"youtube","value":""},{"id":19883,"key":"wikipedia","value":""},{"id":20384,"key":"wc_last_active","value":"1649721600"},{"id":20578,"key":"shipping_method","value":["local_pickup:33"]}]

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 119
    Points : 41 252
    Points
    41 252
    Billets dans le blog
    63
    Par défaut
    Bon, je me réponds, la solution JSON est la plus efficace (et sans besoin de supprimer quoique ce soit)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function getcustomercode(const ptext: String): String;
    var
      JSonValue: TJSonValue;
      JsonArray: TJSONArray;
      ArrayElement: TJSonValue;
    begin
      // create TJSonObject from string
      JsonValue := TJSonObject.ParseJSONValue(pText);
      // get the array
      JsonArray := JsonValue as TJSONArray;
      // iterate the array
      for ArrayElement in JsonArray do begin
        if ArrayElement.GetValue<String>('key') = 'wm_customer_code' then
            Exit(ArrayElement.GetValue<String>('value'));
      end;
    end;

  3. #3
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    J'aurais dit TryGetValue, mais ça passe aussi comme ça.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 119
    Points : 41 252
    Points
    41 252
    Billets dans le blog
    63
    Par défaut
    Bon, en fait j'ai une autre solution à ma question posée à CData
    Comme c'est du mySQL il y a la fonction JSON_EXTRACT
    ma requête est encore à peaufiner mais cela me permettrait (en théorie d'obtenir le customercode)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT o.id,o.customerid,o.billingemail,
    c.id,
    CAST(LEFT(JSON_EXTRACT(MetaDataAggregate, '$[2].value'),5) AS VARCHAR(5)) customercode,
    CAST(LEFT(JSON_EXTRACT(MetaDataAggregate, '$[2].key'),30) AS VARCHAR(30)) customerkey 
    from ORDERS o LEFT JOIN customers c on c.billingemail=o.billingemail  -- ou on c.id=o.customerid 
    where o.id>70100

    le seul truc c'est qu'il faut que la position du dit wm_customer_code soit bien toujours en 2 (base 0)
    Plus je plonge dans WooCommerce plus je sens que ça va me gaver autant que PrestaShop ! Je ne suis pas sorti de l'auberge

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 119
    Points : 41 252
    Points
    41 252
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par pprem Voir le message
    J'aurais dit TryGetValue, mais ça passe aussi comme ça.
    pourquoi un TryGetValue ? C'est sensé toujours être une structure id,key,value

  6. #6
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    pourquoi un TryGetValue ? C'est sensé toujours être une structure id,key,value
    Tu fais confiance aux API des CMS eCommerce maintenant ?

    (je te rassures WooCommerce est moins pire que Prestashop à l'usage, au moins ça tient les changements de versions)

  7. #7
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : dilettant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 214
    Points : 223
    Points
    223
    Par défaut
    Je suis hors sujet, mais je ne me souvenais pas de ce type d'écriture :
    Citation Envoyé par SergioMaster Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exit(ArrayElement.GetValue<String>('value'));
    Je suppose que c'est pareil que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Return := ArrayElement.GetValue<String>('value');

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    sauf que c'est Result et qu'il faut éventuellement ajouter un Exit pour quitter la procédure depuis quelques versions, on peut faire les deux en une seule instruction Exit("Resultat")

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Comment feriez-vous cette requête pour une recherche ?
    Par Core8 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/02/2008, 11h58
  2. Comment définiriez-vous la meilleure stratégie de tests ?
    Par olrt dans le forum Débats sur le développement - Le Best Of
    Réponses: 51
    Dernier message: 30/11/2007, 18h11
  3. [tomcat][jsp] Comment gerez vous vos connexions bdd?
    Par olive.m dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 21/06/2004, 17h35
  4. Réponses: 19
    Dernier message: 14/08/2003, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo