Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- """
- https://woocommerce.github.io/woocommerce-rest-api-docs/
- GPL V2 OU LATER VERSION OF COPYRIGHT
- p1748-sku-grade-produtos-woo.py copyright gsavix 2021-2026
- ..............................................
- recriado por gsavix marco-2021
- modificado por junho-2023
- modificado por
- ..............................................
- cria grade de produtos sku separador por v
- e variacoes arquivo formato csv
- ..............................................
- ####################################################
- idroot,
- skuroot,
- idvariation,skuvariation,ixvariation
- ####################################################
- """
- import locale
- import codecs
- import json
- import requests
- import time
- from woocommerce import API
- ##
- axcsep = 'v' # caractere separador para partes do sku junho-2023 v
- axfns2 = './arq/axsaiverupz.csv' # arquivo contento sku raiz e atributos, sku variacoes
- axseq = 0
- axrep0 = '' # id root
- axrep1 = '' # ids variations
- axsep = ';' # separador
- ar1xwrk = list() # lista sku-root, sku-vari, qtdest, vlrven, vlrpro
- # # 1 2 3 4 5
- axlirolug = list() # idroot (numero), slugroot ('33328+1') prd+cor
- axlirovar = list() # idroot,slugroot,idvar,slugvar
- axli1=list() # idroot e skuroot
- axli2=list() # idvar e skuvar
- axli3=list() # idvar e skuvar ordenado por skuvar
- axli4=list() # ordenado por sku do root
- axprefixdt = '' # prefix data
- locale.setlocale(locale.LC_ALL, '') # locale LC_ALL para pt-br
- axencoding = locale.getpreferredencoding() # WINDOWS CP1252 OU UTF8
- axprefixdt = time.strftime("%Y%m%dT%H%M", time.localtime())
- #
- axsf2 = codecs.open(axfns2,'w', encoding=axencoding, errors='surrogateescape')
- #
- wcapi = API(
- url="CHANGE-URL-YOUR-WOOCOMMERCE", # Your store URL
- consumer_key="ck_CHANGE-YOUR-CONSUMER-KEY", # iduser
- consumer_secret="cs_CHANGE-YOUR-SECRET", # token
- wp_api=True,timeout=59, # Enable the WP REST API integration
- version="wc/v3", # WooCommerce WP REST API version
- )
- #
- #
- #
- print('### BOJ ###')
- print('+ fase 1 - le sku woocom +')
- print('+ p1748-sku-grade-produtos-woo +')
- print('+ compoe variacoes grade +')
- #
- # faz a leitura dos produtos padrao da api 10 em 10
- # expectativa 1000 produtos no woocommerce <===================
- for ix0 in range(0,1000,10): # pagina de 10 em 10 vai ate 1 mil produtos
- axoffset = str(ix0)
- axp = wcapi.get("products/?offset=" + axoffset).json() # faz a leitura proximos existente pagina ou não
- for ix1 in range(len(axp)): # quantos produtos recuperou
- qpro = axp[ix1] # produto desta pagina 1 a um
- axqueid = qpro.get('id') # quem eh o root do produto sendo editado
- if (qpro.get('type') == 'variable' and
- qpro.get('status') == 'publish' and
- qpro.get('manage_stock') == True):
- #
- axrep0 = '' #id root
- #
- # dados root sku
- #
- print('#######################################')
- axprefixdtp = time.strftime("%Y%m%dT%H%M%S", time.localtime())
- axseq = axseq + 1
- print('#', str(axseq).rjust(4,'0'), ' idroot = ',
- str(qpro.get('id')).rjust(5,'0'), ' skuroot = ',
- qpro.get('sku').ljust(20,' '),' dt-hora.: ', axprefixdtp)
- #
- # dados das variacoes sku variacoes
- #
- axppv = wcapi.get("products/" + str(qpro.get('id')) + "/variations?per_page=16").json()
- axrep0 = str(qpro.get('id')).rjust(5,'0') + axsep + qpro.get('sku').ljust(20,' ')
- axli1 = list()
- axli1=([str(qpro.get('id')).rjust(5,'0') , qpro.get('sku')]) # adiciona idroot,slugroot
- axrep1 = axrep0
- axli2 = list()
- for axqq in axppv:
- axidvar = axqq.get('id')
- axskvar = axqq.get('sku') # sku da variacao
- axskuli = axskvar.rsplit(axcsep,1) # split ultimo componente do skuvar
- axqgrad = axli1[1].count(axcsep) # grade sku root eh exotica com 1 e 2 caracteres
- if axqgrad == 2: # temos dois + no skuroot
- axixvar = axskuli[1].rjust(3,'0') # considera ix com 3 bytes com zeros a esquerda
- else:
- axixvar = axskuli[1] # considera ix do 3. elemento sku da variacao
- axidvarz = str(axidvar).rjust(5,'0')
- axskvarz = axskvar
- axixvarz = axixvar
- axli2.append([axidvarz, axskvarz, axixvarz])
- axli3 = list()
- axli3 = sorted(axli2, key=lambda axknil: axknil[2]) # classifica por ix skuvar numeric
- axlirolug.append([axli1, axli3]) # adiciona [idroot,slugroot],[idvar,slugvar]
- #
- # verifica se pagina atual preenche 10 itens eof()
- #
- if ix1 < 9: # nao tem mais multiplos pode parar de ler
- break
- #
- print('#######################################')
- print('+ fase 2 - matrix idroot idvar +')
- print('+ ordenado por sku root +')
- axlisverup = list()
- axli4 = sorted(axlirolug, key=lambda slugroot: slugroot[0][1]) # ordena lista por sku do root
- for axpro in axli4: # nova lista ja ordenada por sku do root
- print(axpro[0][0],axpro[0][1])
- axpsku = str(axpro[0][1]) # skuroot [produto+cor] no verup
- axlisverup.append([axpsku])
- axregs2 = str(axpro[0][0]) + axsep + str(axpro[0][1])
- for k,v,z in axpro[1]:
- axregs2 = axregs2 + axsep + str(k) + axsep + str(v) # sem separador final
- axsf2.write(axregs2 + '\n')
- axsf2.close()
- axprefixdtp = time.strftime("%Y%m%dT%H%M%S", time.localtime())
- print('# data-hora-local.: ', axprefixdtp,' p1748-sku-grade-produtos-woo ' )
- print('### EOJ ###')
Advertisement