-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fallback slug on offerMappings and catalogNs #51
Conversation
add description add banner
Fixes #44 ? |
effectivement c'est lié. je l'avais oublié ça m'aurait fait gagner du temps. par contre, je n'ai pas remplacé, j'ai fait une chaine de fallback. Je ne sais pas comment c'est fichu en interne leur truc, mais parfois, il y a le productSlug, parfois pas. parfois il y a des productPage dans offerMappings parfois pas, idem pour catalogNs La pour cette semaine :
|
J'ai fais des petites stats :
console.table([
{name: 'total', count: elements.length},
{name: 'productSlug', count: elements.filter(e => e.productSlug).length},
{name: 'catalogNs productHome', count: elements.filter(
e => e.catalogNs.mappings.find(m => m.pageType === 'productHome')
).length},
{name: 'offerMappings productHome', count: elements.filter(
e => e.offerMappings.find(m => m.pageType === 'productHome')
).length},
{name: 'fallback', count: elements.filter(
e => e.productSlug
|| e.catalogNs.mappings.find(m => m.pageType === 'productHome')
|| e.offerMappings.find(m => m.pageType === 'productHome')
).length},
]) |
J'ai fais la graphql query sans mettre
931 / 1000, c'est pas fou mais je n'aurais pas mieux je pense. Mais ça appuie que aucune des sources n'est sur, mais si on les combine on a plus de chance d'avoir un résultat. Et dans le pire des cas, si on a pas le slug, je met l'url vers la page ou il y a les jeux offerts |
J'ai trouvé ça comme doc non-officiel. https://github.com/Tectors/EpicGraphQL/blob/main/docs/graphql/catalog/searchStoreQuery.graphql J'ai dig un peu pour le urlSlug, en ne prenant pas en compte ceux qui avaient une forme hexadécimal. Et en l'ajoutant en dernier fallback, Sur l'echantillon de 1000, tout les items ont leur slug !
const response = require('./response.json');
elements = response.data.Catalog.searchStore.elements;
elements.sort((a, b) => a.title.localeCompare(b.title))
console.table([
{name: 'total', count: elements.length},
{name: 'productSlug', count: elements.filter(e => e.productSlug).length},
{name: 'catalogNs productHome', count: elements.filter(
e => e.catalogNs.mappings?.find(m => m.pageType === 'productHome')
).length},
{name: 'offerMappings productHome', count: elements.filter(
e => e.offerMappings?.find(m => m.pageType === 'productHome')
).length},
{name: 'fallback', count: elements.filter(
e => e.productSlug
|| e.catalogNs.mappings?.find(m => m.pageType === 'productHome')
|| e.offerMappings?.find(m => m.pageType === 'productHome')
).length},
{name: 'fallback urlSlug', count: elements.filter(
e => e.productSlug
|| e.catalogNs.mappings?.find(m => m.pageType === 'productHome')
|| e.offerMappings?.find(m => m.pageType === 'productHome')
|| (e.urlSlug && !/^[0-9a-f]+$/.test(e.urlSlug))
).length},
{name: 'urlSlug but no productSlug', count: elements.filter(
e => (e.urlSlug && !/^[0-9a-f]+$/.test(e.urlSlug)) && !e.productSlug
).length},
{name: 'urlSlug but no catalogNs', count: elements.filter(
e => (e.urlSlug && !/^[0-9a-f]+$/.test(e.urlSlug)) && !e.catalogNs.mappings?.find(m => m.pageType === 'productHome')
).length},
{name: 'urlSlug but no offerMappings', count: elements.filter(
e => (e.urlSlug && !/^[0-9a-f]+$/.test(e.urlSlug)) && !e.offerMappings?.find(m => m.pageType === 'productHome')
).length},
{name: 'url null', count: elements.filter(e => !e.url).length},
]);
const badElementsUrlSlug = elements.filter(e => !e.urlSlug || /^[0-9a-f]+$/.test(e.urlSlug));
// console.table(badElementsUrlSlug, ['title', 'urlSlug']);
console.table([
{name: 'total', count: badElementsUrlSlug.length},
{name: 'productSlug', count: badElementsUrlSlug.filter(e => e.productSlug).length},
{name: 'catalogNs productHome', count: badElementsUrlSlug.filter(
e => e.catalogNs.mappings?.find(m => m.pageType === 'productHome')
).length},
{name: 'offerMappings productHome', count: badElementsUrlSlug.filter(
e => e.offerMappings?.find(m => m.pageType === 'productHome')
).length},
{name: 'fallback', count: badElementsUrlSlug.filter(
e => e.productSlug
|| e.catalogNs.mappings?.find(m => m.pageType === 'productHome')
|| e.offerMappings?.find(m => m.pageType === 'productHome')
).length},
{name: 'url null', count: badElementsUrlSlug.filter(e => !e.url).length},
]); J'avais loggé tout les slugs hexa, pas de faux positif évident sur l'échantillon |
En vrai de vrai, mais flemme de check. |
J'ai ajouté un cas de test sur getOfferedGames. |
Ok pour moi, t'as encore des modifs à faire ou c'est mergeable ? |
C'est ok pour moi, au pire je ferai une autre pr plus tard |
add description
add banner
J'ai fait pas mal de reverse-engeenering pour voir ce qu'on pouvais faire.
J'ai trouvé cette URL https://store-site-backend-static-ipv4.ak.epicgames.com/freeGamesPromotions?locale=fr&country=FR&allowCountries=FR appelé depuis la page d'accueil
J'y ai trouvé les champs catalogNs et offerMappings qui avait le slug, alors que le productSlug était null.
Au passage j'ai rajouté la description et une bannière.
J'apprécierai que quelqu'un test, je suis sur un PC avec proxy d'entreprise, c'est galère de lancer des programmes node qui vont requêter l'exterieur.