RFP: Sistema de importación de varias fuentes de contenido para PHP+MySQL+Wordpress

César Astudillo
8 min readApr 25, 2020
Esta imagen ejemplifica el tipo de trabajo que busco: rápido, sencillo, sin florituras, y que funcione.

tl;dr

Quiero presupuesto para el desarrollo de un sistema en PHP+MySQL+Wordpress que capture todos mis tuits, posts de LinkedIn, respuestas de Curious Cat, y antiguas entradas de blogs; los someta a ciertas transformaciones de formato; y los importe en una Base de Datos de WordPress/MySQL, para así tener en un solo sitio todas mis publicaciones. Este puede ser el origen de una relación en que te conviertas en mi “web developer de cabecera”.

Modificacione introducidas en la RFP

28 abril 2020

Se han introducido los siguientes cambios:

  1. LinkedIn no será “scrapeado”, sino que habrá una única importación a partir del archivo de volcado que LinkedIn entrega cuando el usuario lo solicita.
  2. El escaneado periódico de plataformas y la repetición de la importación después de la primera importación inicial solo se harán en Curious Cat y en Twitter.

Antecedentes y objetivos

Soy un profesional independiente de Diseño Estratégico e Innovación que desde 2002 ha publicado mucho en distintas plataformas:

Me estoy planteando replicar toda mi proyección online en un único sitio (que sería mi segundo blog) donde se recoja toda (o una amplia selección) de mi producción online bajo la forma común de entradas de blog. Yo me encargaría de adquirir y modificar una plantilla responsive de Wordpress e instalarla. Lo que necesito es que alguien me desarrolle un sistema que:

  • Importe (a partir de los distintos formatos de output que facilita cada plataforma, tales como RSS, consulta por API, servicio de takeout…) toda mi producción.
  • Replique cada entrada de dichas plataformas en mi blog de Wordpress bajo la forma de entrada de dicho blog, fechada retrospectivamente en la fecha de la publicación original, y formateada de acuerdo con los detalles generales y particulares que se enumeran en el siguiente apartado.
  • A partir del momento de la primera importación masiva, escanee periódicamente algunas de estas plataformas y autopublique cada nueva entrada sin mi intervención, con las excepciones detalladas en el siguiente apartado.

También me estoy planteando (considéralo un módulo opcional) publicar un mirror de mi blog en inglés, en el que se pre-publicaran (para mi retoque y publicación manual) traducciones automáticas de las entradas del castellano al inglés utilizando la API de DeepL (cuya suscripción yo costearía).

Detalles

Con carácter general, todas las entradas importadas tendrán en común lo siguiente:

  • Quedarán fechadas con la fecha/hora de su publicación original, no con la fecha/hora de su importación.
  • Serán automáticamente etiquetadas con una etiqueta a determinar, que designará la plataforma de la que proceden.
  • Incorporarán al final de la entrada un enlace a la entrada original en la plataforma de origen.
  • Todas las imágenes que contengan las entradas serán descargadas y transferidas al servidor del blog (el sistema no se limitará a referenciar la antigua URL de la imagen en la vieja plataforma en el tag IMG, sino que referenciará nuevas copias locales de la imagen).
  • Los enlaces a tipos de contenido populares que contengan las entradas (estoy pensando en enlaces a tuits, y enlaces a vídeos de YouTube) serán formateados de forma específica y transformados en incrustaciones (a lo mejor WordPress ya tiene un sistema para esto, no sé, ilústrame tú).
  • En aquellas plataformas cuyas entradas no incluyan un título (Twitter, LinkedIn, Curious Cat) se generará automáticamente ese título como las tres o cuatro palabras iniciales del texto seguidas de puntos suspensivos (cuando tenga tiempo ya iré reemplazando esos títulos por títulos ad hoc).

Algunos detalles de tratamiento de entradas serán dependientes de plataforma:

  • Antiguo blog en Bitako.com: Se preservará la entrada en sus detalles de formato. Esta importación se efectuará una sola vez.
  • Twitter: No se publicarán todas las entradas ni se publicarán de inmediato. Solo se importarán los tuits individuales con más de, digamos, 15 likes, así como los hilos. Los hilos se transformarán en entradas únicas en las que cada tuit pasará a ser un párrafo. Todas las entradas importadas con este sistema selectivo quedarán en la sección de borradores de mi blog, y solo serán publicadas cuando yo autorice su publicación. Necesitaré un sistema de importación y reformateo específico para mi meta-hilo de especulaciones, en el que cada especulación será un post (con párrafos concatenados en caso de tratarse de un hilo) y el título de dicho post será el texto del tuit que lo referencia en el meta-hilo (es complicado, lo sé, lo hablamos en detalle).
  • LinkedIn: La importación se hará una sola vez y se realizará a partir del archivo que LinkedIn proporciona cuando el usuario solicita un volcado de los datos de la cuenta. Dado que todos mis posts en LinkedIn contienen una imagen, y esa imagen es de dimensiones similares, habrá una plantilla de diseño específica para posts de LinkedIn que muestre la combinación de texto e imagen en un diseño exclusivo para las entradas procedentes de esta plataforma. A partir del momento de la importación, y para no tener que hacer scraping, juntos determinaremos un método para que pueda publicar en algún tipo de plataforma intermedia (Buffer o el propio Wordpress) y a partir de ahí se realice una autopublicación en LinkedIn.
  • Curious Cat: Su título serán las primeras tres o cuatro palabras de la pregunta. La entrada se formateará con una plantilla ad hoc del tipo “<p><p><strong>Pregunta: [pregunta]</strong></p> <p>Respuesta:<br>[respuesta]</p>”. A partir de la primera importación masiva, Curious Cat será escaneado y cualquier nueva respuesta añadida será autopublicada en el blog.
  • Nuevo blog: No precisará importación (su BDD será la BDD receptora del resto)
  • Medium: Se preservará en lo posible el formato de títulos, textos e imágenes, transfiriéndolo a una plantilla/hoja de estilos específica. Solo habrá una única importación masiva.

Condiciones

Te entregaré acceso a mi servicio de hosting (Arsys) con los permisos necesarios para que puedas instalarlo y configurarlo todo.

Simultáneamente yo estaré cacharreando con qué plantilla de Wordpress usar y customizar. Estaremos en comunicación para que el resultado agregado sea óptimo.

La plantilla será responsive y espero que el resultado de tu importación de entradas también lo sea, incorporando las modificaciones que hagan falta en el contenido original para satisfacer este requisito.

El importe, el plazo y la forma de pago dímelos tú. Como verás más abajo, me parece razonable que me des una horquilla y dejemos cierta holgura para la incertidumbre.

Mi intención es contar contigo para futuros mantenimientos evolutivos, pero mi copia totalmente funcional y bien documentada del código PHP debe permanecer en mi servidor y debo poder modificarla y extenderla yo mismo si así elijo hacerlo aunque ya no tengamos relación (te digo ya que si la relación funciona, no lo voy a hacer). A tal efecto, me darás licencia no exclusiva para seguir usándolo y modificándolo indefinidamente. “Licencia no exclusiva” significa que si tú le vendes una copia de ese mismo código a otras personas con mis mismas necesidades, me parece muy bien, enhorabuena, me alegro por ti.

Me reservo discrecionalmente darle crédito a tu trabajo en mi blog, cosa que haré encantado y de forma profusa si quedo satisfecho de nuestra relación.

Prefiero PHP porque lo puedo tocar yo y me da confianza, y porque entiendo que es una herramienta no del todo inapropiada para este trabajo. No me juzgues. Si tienes otra alternativa, justifícala y me lo pienso, pero lo veo difícil.

Si el trabajo se hace desde España, deberá estar facturado con su correspondiente retención de IRPF y su correspondiente IVA. No pago en negro. Si se hace desde otro país, estudiaremos juntos los requisitos impositivos para el comercio entre nuestros dos países y los cumpliremos fielmente.

Si estoy conforme con el trabajo (así como en el pago inicial), mi plazo de pago es inmediato (no más de 1 ó 2 días hábiles + lo que tarde la transferencia de fondos).

Estoy dispuesto a pagar un porcentaje razonable de tu dedicación al inicio, y el resto a la entrega del trabajo a mi satisfacción incluyendo la corrección de todos los errores. Si te comprometes a devolverme el pago inicial en caso de que yo no quede satisfecho, el pago inicial puede ser mayor. Si en caso de que yo no quede satisfecho no puedo recuperar mi pago inicial, entenderás que el mismo deberá ser muy pequeño. Yo por mi parte me comprometo a no hacer uso alguno de parte alguna de tu trabajo si no quedo plenamente satisfecho y pago el trabajo en su totalidad.

El QA lo haces tú, no yo. No voy a tirarme horas y horas reportando decenas de errores. Entenderé que se cuele alguna cosita, pero no sé, digamos que más de diez tickets significa que nuestra relación no está funcionando. Entiendo que este encargo no es “rocket surgery”, como dice Steve Krug.

Me comprometo a no intentar colarte como “errores” innumerables cambios de opinión y ocurrencias de nueva funcionalidad de última hora. A cambio, tú te comprometes a no sobreingenierizar esto y no hacer una montaña de un grano de arena. Esto es el inicio de una relación. Ofrezco lealtad y respeto a tu tiempo y tu trabajo, y espero lo mismo de ti.

Dentro de las ofertas que juzgue con suficiente solvencia técnica y profesional, observaré con especial preferencia ofertas de personas pertenecientes a colectivos infrarrepresentados en el mundo de la tecnología.

Qué espero de tu oferta

Si estás interesada/o en hacer este trabajo para mí, por favor escribe a cesar(arroba)astudillo.com indicando lo siguiente:

  • Breve texto de motivación indicando por qué te apetece ser mi colaboradora/colaborador en esto, tu experiencia previa, y por qué gracias a dicha experiencia vas a poder hacérmelo de forma efectiva en coste.
  • Dudas o preguntas que tengas (si no te gusta leer y me preguntas cosas que considero que ya están contestadas en esta RFP, empezamos mal).
  • Enlace a LinkedIn / portfolio online para que vea tu experiencia.
  • Tu tarifa horaria.
  • Tu horquilla de dedicación en horas (mínimo, máximo, “most likely”). Según el número de horas facturadas al final del proyecto, por debajo del “most likely” quedaré contentísimo y diré maravillas de ti. Entre el “most likely” y el máximo, rezongaré pero pagaré. Más del máximo no pagaré. Si la dispersión de tu horquilla es enorme, pensaré que no sabes lo que estás haciendo: ¡entiendo que las especificaciones son razonablemente claras!
  • A qué se convierte esa horquilla de dedicación en horquilla de duración de proyecto en calendario natural (entiendo perfectamente que este no sea tu único trabajo).
  • Ídem de los dos puntos precedentes, para el módulo opcional de traducción automática.
  • Tu propuesta de organización entre nosotros (scrum en Trello, sistema de tickets, lo que sea que propongas).
  • Horquilla de dedicación aproximada para un hipotético (y previsible) encargo de reprogramación del sistema de scraping/importación en caso de que LinkedIn cambie de diseño, Twitter cambie de API, etc.
  • Condiciones de pago (porcentaje al inicio, porcentaje al final).
  • Cualquier cosa que quieras añadir.
  • No hace falta que te mates con la presentación. Todo en un mail bien estructurado es más que suficiente.

¡Muchas gracias por tu tiempo! Siéntete libre de transmitirle esto a quien creas que pueda estar interesada/o.

--

--

César Astudillo

Actualmente haciendo trabajo de campo etnográfico en Sol 3