← back to Zendesk Chat Analyzer

__pycache__/pull.cpython-314.pyc

88 lines

+
4V{j���p�Rt^RIt^RIt^RIt^RIt^RIt^RIt^RIt]PPR4t]PP]PP]4RR4tRt]!]P$P'RR44t]!]P$P'RR	44tR
RRR
RRRRRRRRRR/t.RNRNRNRNRNRNRNRNR NR!NR"NR#NR$NR%NR&NR'NR(NR)NR*NR+NR,NR-NR.NR/NR0NR1NR2NR3NR4NR5NR6NR7NtR8tR9tR:tR;tR<tR=tR>tR?tR@t RAt!RBt"]#RC8Xd
]"!4R#R#)Dz�Pull Zendesk Chat history via the REST API and emit public/data.json.
Token is read server-side from secrets-manager/.env and NEVER written to output.Nz~/Projects/secrets-manager/.env�publicz	data.jsonz.https://www.zopim.com/api/v2/incremental/chats�START�
1760000000�	MAX_PAGES�80zdiscontinued/availabilityz�discontinu|no longer|out of (stock|production)|still (available|make|carry|sell|produc|in production)|been discontinued|still (get|order|sell)|hard to find|can.?t find|in stock|backorder|availabzorder status/shippingz�where.?s my order|trackin|has.?n.?t (ship|arriv|come)|not (yet )?(received|arrived|delivered)|order status|shipping (info|status|update)|when will .* (ship|arrive|deliver)|still waiting|lead time|how long�samplesz'\bsample|swatch|memo\b|cutting|piece ofztrade/pro accountz|trade account|designer discount|to the trade|pro(fessional)? account|interior designer|net price|trade price|resale|resellerz
pricing/quotezBhow much|price|cost per|quote|\$|per (roll|yard|yd)|pricing|affordzinstallation/how-tozuinstall|how (do|to) (i )?(apply|hang|paste)|paste the wall|square (feet|footage)|how many rolls|coverage|repeat|matchzcomplaint/issuez�wrong|damag|defect|broken|torn|missing|refund|return|cancel|terrible|awful|disappoint|bad lot|no (one|response|reply|answer)|rude|charged twice�Kravet�Thibaut�
SchumacherzLee Jofaz
Cole & SonzPhillip JeffrieszPhillipe Romano�Waverly�
BrunschwigzClarke & Clarke�Romo�Scalamandre�Osborne�ZoffanyzDesigners GuildzRalph Lauren�York�	HollywoodzAvant GardezGP & J Baker�GroundworkszPierre Frey�Artez
Maya Romanoff�KorosealzWolf Gordon�Gaston�Farrow�	Sanderson�MorriszRebel Walls�Astekc��\PPR4'd&\PR,P4#\	\
4FapVP
R4'gKVPR^4^,P4PR4PR4u#	\R4h \dLi;i)�ZENDESK_CHAT_ACCESS_TOKENzZENDESK_CHAT_ACCESS_TOKEN=�=�"�'zno token)
�os�environ�get�strip�open�ENV�
startswith�split�	Exception�
SystemExit)�lines �pull.py�tokenr,s���	�z�z�~�~�1�2�2��z�z�5�6�<�<�>�>�
���I�D����;�<�<��z�z�#�q�)�!�,�2�2�4�:�:�3�?�E�E�c�J�J��
�Z�
 � ���
��
�s�&C�7AC�>C�C�Cc��\PPVRRV,/R7p\PPV^-R7;_uu_4p\P
!V4uuRRR4# +'giR#;i)�
AuthorizationzBearer )�headers)�timeoutN)�urllib�request�Request�urlopen�json�load)�url�tok�req�rs&&  r+�fetchr;)sZ��
�.�.�
 �
 ���	�C��.P�
 �
Q�C�	���	�	��R�	�	0�	0�A��y�y��|�
1�	0�	0�	0�s�A5�5B	c��V'gR#\P!RV4^,p\P!RRV4P4pV#)�u![–\-|]\s*Designer Wallcoveringsz\s+� )�rer'�subr#)�ts&r+�clean_titlerB/s>����
���5�q�9�!�<�A�
���v�s�A��$�$�&�A��H�c���T;'gRP4p\P4UUu.uF%wr#\P!W14'gK#VNK'	upp#uuppi�r=)�lower�THEMES�itemsr?�search)�textrA�name�rxs&   r+�classifyrM8sC��	
�������A�!'����D��X�T�2�9�9�R�3C�D�D��D�D��Ds� A!�A!c��T;'gRP4p\\Uu0uFq"P4V9gKVkK	up4#uupirE)rF�sorted�BRANDS)rJrA�bs&  r+�find_brandsrR=s?��	
�������A��f�7�f����	�Q��1�1�f�7�8�8��7s�A�Aa3wrong|damag|defect|broken|torn|missing|refund|return|cancel|terrible|awful|horrible|disappoint|frustrat|angry|upset|unhappy|not happy|problem|issue|never (received|got|arrived)|still waiting|ridiculous|unacceptable|complain|poor|bad (lot|quality|experience)|worst|rude|ignored|no (one|response|reply|answer)z�love|great|beautiful|perfect|thank you|thanks|excellent|wonderful|happy|gorgeous|amazing|fantastic|pleased|appreciate|awesome|excited|can.?t wait|lovely|stunningz�\basap\b|urgent|immediately|right away|deadline|need (it |them )?by|running out|time.?sensitive|today|tomorrow|rush|as soon as|quickly|expedite|in a hurry|last minutec��T;'gRP4pVP4'gR#\\P!\
V44p\\P!\V44pW#8�dR#W28�dR#R#)r=�negative�positive�neutral)rFr#�lenr?�findall�NEG�POS)rJrA�neg�poss&   r+�	sentimentr]Gs`��	
�������A��7�7�9�9��

�b�j�j��a� �
!�C��R�Z�Z��Q�-?�)@�3�
�y��
�y��rCc�|�\P!\T;'gRP44'dR#R#)r=�high�normal)r?rI�URGrF)rJs&r+�urgencyrbSs,���Y�Y�s�T�Z�Z�R�$6�$6�$8�9�9�6�G�x�GrCc���\4p\R,\PP	RRR\
/4,p.^r2V'Ed�V\8Ed�\W4pV^,
pVPR.4pVEF0pVPR4;'g/pVPR4;'g.pVU	u.uFFp	\V	\4'gKV	PR4'gK4V	PRR4NKH	p
p	VU	u.uFvp	\V	\4'gKV	PR4'gK4\V	PR	R44P4R
8XgKdV	PRR4NKx	pp	V'g*VPR4'dVPR4.pVPR4;'g.Uu.uF5q�PR
4'gK\VPR
44NK7	p
pRPV4p\V4p\!VR,RPV
4,R,RPVPR4;'g.4,4pTP#/RVbRVbR\%V4bR\'V4bRVPR4bRVPR4bRVPR4bRVPR4;'gRbRVPR4;'gRbRVPR4;'gRbRVPR4;'gRbRVPR4;'gRbR VPR 4;'gRbR!VPR"4;'g.bR#VPR#4;'g^bR$VPR$4;'gRbRVPR4;'gRbRVPR4;'g.R%VPR&4;'gRR'\)VPR'44R(\)VPR(44R)\+V
4R*V'dTMT
R+T
R,VPR-4;'gR/C4EK3	VPR.4pVPR/4pV'd	V'gMBV'dTM4\R,\PP	RRRV/4,pEK�R0\-\.P.!44R1\+V4R2VRV/p\0P2!\0P4P7\84R3R47\:P<!V\?\8R54R9R67\AR7\+V4V\83,4R8#uup	iuup	iuupi):�?�fieldszchats(*)�
start_time�chats�session�history�msgr=�sender_type�visitor�comment�webpath�titler>�tags�themes�brandsr]rb�id�ts�	timestamp�type�country_codez??�country�country_name�Unknown�city�region�platform�browser�agents�agent_names�duration�rating�search_terms�referrer_search_terms�missed�	proactive�	msg_count�visitor_msgs�titles�	ticket_id�zendesk_ticket_id�end_time�	next_page�generated_at�count�pagesT)�exist_ok�w)�
separatorszwrote %d chats (%d pages) -> %sN)�,�:)!r,�BASEr1�parse�	urlencoderrr;r"�
isinstance�dict�strrFrB�joinrMrR�appendr]rb�boolrW�int�timer �makedirs�path�dirname�OUTr5�dumpr$�print)r8r7�rowsr��drg�c�s�hist�h�msgs�vmsgsr�r��vtextrqrr�end�nxt�payloads                    r+�mainr�Ws
��
�'�C�
��*�v�|�|�-�-�x��\�SX�.Y�Z�
Z�C��a�%�

�#�%�)�#��#�O��
��
�����g�r�"���A����i� �&�&�B�A��5�5��#�)�)�r�D�.2�[�d��j��D�6I�$�a�e�e�TY�l�$�A�E�E�%��$�d�D�[�/3�u�t�!�"�1�d�+�&�01���e��&�AD�Q�U�U�=�Z\�E]�A^�Ad�Ad�Af�js�As�&�Q�U�U�5�"�%�t�E�u��Q�U�U�9�-�-����y�)�*��<=�E�E�)�<L�<R�<R�PR�<R�f�<R�a�W\�W\�]d�We�1�k�!�%�%��.�1�<R�F�f��H�H�U�O�E��e�_�F� ����s�x�x��/?�!?�#�!E����QR�QV�QV�W]�Q^�Qd�Qd�bd�He�!e�f�F��K�K���&���&���Y�u�-���7�5�>�	�
�a�e�e�D�k���a�e�e�K�(�
�����f�
������n� 5� =� =����1�5�5��0�=�=�I������f�
�+�+����!�%�%��/�/�/�R���A�E�E�*�-�3�3����1�5�5��+�1�1�r���!�%�%�
�.�4�4�"���A�E�E�*�-�2�2��� �!�%�%��/�/�/�R�!�"�1�5�5��+�1�1�r�#�$����f�
�+�+������&=� >� D� D�"��$�q�u�u�X��/��T�!�%�%��"4�5��S��Y����D��&��Q�U�U�#6�7�=�=�2�3�
��P�e�e�J����e�e�K� ���C���c�d�S�j�6�<�<�+A�+A�8�Z�Ye�gj�Bk�+l�l��	��D�I�I�K�(���T������	�G��K�K�������$�t�4��I�I�g�t�C��~�*�=�	�
+�s�4�y�%��.E�
E�F��g\��u��gs6�W!�W!�8W!�W&�1W&�
+W&�:W&� W+�=W+�__main__)$�__doc__r5r r?�urllib.requestr1�urllib.parse�sysr�r��
expanduserr%r�r��__file__r�r�r�r!r"rrrGrPr,r;rBrMrRrYrZrar]rbr��__name__�rCr+�<module>r�s^��T�<�<�<�<��g�g���:�;���g�g�l�l�2�7�7�?�?�8�,�h��D��7���B�J�J�N�N�7�L�1�2����
�
���{�D�1�2�	� �"g��m�
�9��Y��Z��T��j�
��
q�(�
q�9�
q�\�
q�*�
q�\�
q�BT�
q�Uf�
q�
�
q� �
q�!2�
q�39�
q�:G�
q�HQ�
q�R[�
q�\m�
q�
�
q��
q� +�
q�,9�
q�:H�
q�IV�
q�Wd�
q�ek�
q��
q�%�
q�&3�
q�4<�
q�=E�
q�FQ�
q�RZ�
q�[h�
q�ip�
q��	!��
�E�
9�
}��k��p��	�H�>G�B�z���F�rC