mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-18 06:44:46 -07:00
Map App Store genres to categories
This commit is contained in:
parent
3faeaa7745
commit
848023788c
2 changed files with 64 additions and 4 deletions
|
|
@ -5,6 +5,7 @@ import axios from 'axios'
|
||||||
|
|
||||||
import statuses, { getStatusName } from './statuses'
|
import statuses, { getStatusName } from './statuses'
|
||||||
import appStoreGenres from './app-store/genres.js'
|
import appStoreGenres from './app-store/genres.js'
|
||||||
|
import { findCategoryForTagsSet } from './categories.js'
|
||||||
import parseDate from './parse-date'
|
import parseDate from './parse-date'
|
||||||
import { eitherMatches } from './matching.js'
|
import { eitherMatches } from './matching.js'
|
||||||
import { getAppEndpoint } from './app-derived'
|
import { getAppEndpoint } from './app-derived'
|
||||||
|
|
@ -110,7 +111,7 @@ async function fetchBundleGenres () {
|
||||||
function generateTagsSetFromGenres( bundleId, bundleGenres ) {
|
function generateTagsSetFromGenres( bundleId, bundleGenres ) {
|
||||||
// If we don't have this bundleID
|
// If we don't have this bundleID
|
||||||
// then return empty
|
// then return empty
|
||||||
if ( !bundleGenres.has( bundleId ) ) return []
|
if ( !bundleGenres.has( bundleId ) ) return new Set()
|
||||||
|
|
||||||
const genres = new Set()
|
const genres = new Set()
|
||||||
|
|
||||||
|
|
@ -188,6 +189,19 @@ export default async function () {
|
||||||
|
|
||||||
const tags = generateTagsSetFromGenres( appScan.bundleIdentifier, bundleGenres )
|
const tags = generateTagsSetFromGenres( appScan.bundleIdentifier, bundleGenres )
|
||||||
|
|
||||||
|
// Move productivity tag to the end since it's a more generic tag
|
||||||
|
if ( tags.has('Productivity') ) {
|
||||||
|
tags.delete('Productivity')
|
||||||
|
tags.add('Productivity')
|
||||||
|
}
|
||||||
|
|
||||||
|
const foundCategory = findCategoryForTagsSet( tags )
|
||||||
|
|
||||||
|
const category = {
|
||||||
|
label: foundCategory ? foundCategory.label : undefined,
|
||||||
|
slug: foundCategory ? foundCategory.slug : 'uncategorized'
|
||||||
|
}
|
||||||
|
|
||||||
// Add to scanned app list
|
// Add to scanned app list
|
||||||
scanListMap.set( appSlug, {
|
scanListMap.set( appSlug, {
|
||||||
name: appName,
|
name: appName,
|
||||||
|
|
@ -204,9 +218,7 @@ export default async function () {
|
||||||
},
|
},
|
||||||
slug: appSlug
|
slug: appSlug
|
||||||
}),
|
}),
|
||||||
category: {
|
category,
|
||||||
slug: 'uncategorized'
|
|
||||||
},
|
|
||||||
tags: Array.from(tags),
|
tags: Array.from(tags),
|
||||||
relatedLinks
|
relatedLinks
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,32 @@ export function makeCategorySlug ( categoryName ) {
|
||||||
return makeSlug( categoryName )
|
return makeSlug( categoryName )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const categoryMap = new Map([
|
||||||
|
[ 'Business', 2 ],
|
||||||
|
[ 'Entertainment', 5 ],
|
||||||
|
[ 'Finance', 2 ],
|
||||||
|
[ 'Games', 100 ],
|
||||||
|
[ 'Music', 6 ],
|
||||||
|
[ 'Photo & Video', 7 ],
|
||||||
|
[ 'Productivity', 2 ],
|
||||||
|
[ 'Utilities', 12 ],
|
||||||
|
[ 'Graphics & Design', 7 ],
|
||||||
|
[ 'Developer Tools', 1 ],
|
||||||
|
// [ 'Name', 1 ],
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Maps App Store Genre to categort IDS
|
||||||
|
export function getCategoryIdForGenre ( genreName ) {
|
||||||
|
|
||||||
|
// If we don't have this genre mapped
|
||||||
|
// then return nothing
|
||||||
|
if ( !categoryMap.has(genreName) ) return null
|
||||||
|
|
||||||
|
// return this category id mapped to this genre
|
||||||
|
return categoryMap.get( genreName )
|
||||||
|
}
|
||||||
|
|
||||||
// Contains all types of properies to keep data consistent
|
// Contains all types of properies to keep data consistent
|
||||||
export const categoryTemplate = {
|
export const categoryTemplate = {
|
||||||
|
|
@ -156,6 +182,8 @@ export const categories = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const categoriesById = Object.fromEntries( Object.entries( categories ).map( ([ key, category ]) => [category.id, { ...category, key } ] ) )
|
||||||
|
|
||||||
export function getAppCategory (app) {
|
export function getAppCategory (app) {
|
||||||
if (typeof app.category === 'undefined') {
|
if (typeof app.category === 'undefined') {
|
||||||
console.log('app', app)
|
console.log('app', app)
|
||||||
|
|
@ -178,3 +206,23 @@ export function getAppCategory (app) {
|
||||||
|
|
||||||
return categories[app.category.slug]
|
return categories[app.category.slug]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function findCategoryForTagsSet ( tags ) {
|
||||||
|
|
||||||
|
for ( const tag of tags ) {
|
||||||
|
const categoryIdForGenre = getCategoryIdForGenre( tag )
|
||||||
|
|
||||||
|
// Skip non-mapped genres
|
||||||
|
if ( categoryIdForGenre === null ) continue
|
||||||
|
|
||||||
|
// const foundCategory = categoriesById[ categoryIdForGenre ]
|
||||||
|
|
||||||
|
// category.label = foundCategory.label
|
||||||
|
// category.slug = foundCategory.slug
|
||||||
|
|
||||||
|
return categoriesById[ categoryIdForGenre ]
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue