python 3.x – Siempre obtengo el mismo registro dentro de una lista

Tu problema es que la expresión xpath() que usas dentro del bucle contiene una ruta absoluta. Es decir, aquí por ejemplo:

  precio= articulo.xpath('//span(@class="price-tag-fraction")//text()').get()

Aunque articulo es un elemento particular, al ejecutar sobre él .xpath() puedes pasarle una ruta absoluta o relativa. Si se la pasas absoluta (que comience por /) se aplicará desde la raíz del documento, en vez de desde ese elemento.

Cambialo por una ruta relativa, así:

            for articulo in response.xpath('//li(@class="ui-search-layout__item")'):
               precio= articulo.xpath('.//span(@class="price-tag-fraction")//text()').get()
               titulo= articulo.xpath('.//h2(@class="ui-search-item__title")//text()').get()

Ahora el resultado será:

{'price': '2.099', 'title': 'Plants vs. Zombies: Garden Warfare 2 Standard Edition Electronic Arts PS4 Físico'}
{'price': '1.399', 'title': 'FIFA 19 Standard Edition Electronic Arts PS4 Físico'}
{'price': '3.199', 'title': 'Gran Turismo Sport Standard Edition Sony PS4 Físico'}
// ... omitidos ...
{'price': '2.077', 'title': 'Juego Ps4 Shadow Of War Middle Earth Oferta Navidad'}
{'price': '1.799', 'title': 'Metal Gear Survive Juego Ps4 Fisico/ Mipowerdestiny'}

html5 – scrset siempre me carga la misma imagen

<img src="https://es.stackoverflow.com/./18-CONTACTUS-HEADER.jpg"
        srcset="./0.jpg 800w,./500x200.png 500w,./375px.png 375w"
        sizes="(min-width:501px) 800px,(min-width:800px) 500px,(min-width:900px) 375px" />

Siempre me carga la imagen de 800w aunque cambie el tamaño de la pantalla, las demas no cargan

Quiero que dependiendo de la media query se muestre una u otra imagen pero que no se muestre la misma siempre.

array – Llamada GET siempre me trae una colección, ¿cómo hacer para traer 1 recurso por separado?

No puedo hacer que la respuesta que hago a una API sea “única”, en vez de devolverme un sólo recurso me trae una colección y necesito ver sólo un recurso.

  1. En mi controlador PlayVideosController hago una llamada hacia una API en donde le agrego una variable $id al parámetro de mi función, esta busca en la API la columna de _id, luego la guardo en una variable que guarda un array.
    public function thps4($id)
    {
        $id++;
        $thps4Videos = Http::get('http://thvid-api.herokuapp.com/videos/game/THPS4/$id/1')->json();
    
        $thps4Video = $thps4Videos(0);
        return view ('videos.thps4', compact('thps4Video'));
    }
  1. Esta información la paso a un componente de Livewire en donde realizo un forelse, y dentro tengo un <a href="">, aquì le paso el $key para poder seleccionar un recurso, esto como resultado me genera una URL asi: http:://thpsvido.com/videos/thps4/4
<div wire:init="loadTHPS4">
    <div>

        @forelse ($thps4Results as $key => $thps4)
            <div wire:key="results-{{ $thps4('_id') }}">
                <img src="https://es.stackoverflow.com/{{ $thps4("Thumbnail') }}">
                    <div>
                        <a class="relative bottom-4" href="videos/thps4/{{ $key }}">
                            <svg>
                            </svg>
                        </a>

                        <p class="text-sm font-semibold ml-14">
                            {{ $thps4('Title') }}
                        </p>
                    </div>
            </div>
        @empty
            @foreach (range(1,6) as $thumbnail)
                <div wire:key="empty-{{ $thumbnail }}">
                    <p>cargando...</p>
                </div>
            @endforeach
        @endforelse
    </div>
</div>
  1. Al hacer clic en el href uno es redireccionado a otra página en donde existe un elemento de tipo <video>, y utilizando una librería, VideoJS hago que se carge un video de Youtube. Es en las propiedades de la librería en donde escribo la dirección, y aquí en la dirección: reemplazo el ID del video de youtube con la variable que tengo en mi controlador. Aquí, la variable de $key ya tiene que haber asociado la posición de un array, con la columna ID. Y esto debería de suceder para todas las arrays, obteniendo un video con un ID diferente.
    <div class="pt-20 h-full w-screen">
        <video
            id="vid1"
            class="video-js"
            controls
            autoplay="true"
            preload="auto"
        >
      </video>

        <div
            x-data="{close: true}"
            x-show="close"
            class="text-center"
        >
            <p class="text-sm text-gray-500">
              Mute is enabled by default, sorry for the inconveniences
            </p>
            <p 
                x-on:click="close = false"
                class="text-green-500 text-sm cursor-pointer"
            >
                close
            </p>
        </div> {{-- inconveniences message --}}

    </div>
    
    <!-- videojs -->
    <script src="https://vjs.zencdn.net/7.10.2/video.min.js"></script>
    <script src="{{ asset ('/js/Youtube.min.js') }}"></script>
    
    <script>
        var player = videojs('vid1', { 
            "techOrder": ("youtube"), 
            "sources": ({ "type": "video/youtube", 
            "src": "http://www.youtube.com/watch?v={{ $thps4Video('ID') }}"}),
            "fluid": true,
            "autoplay": true
        });
        player.ready(function() {
            setTimeout(function() {
                player.autoplay('muted');
                player.volume(0.5);
                player.fluid('true')
            }, 2000);
        });
    </script>

Dependiendo de la URL, un video diferente se debería de cargar cada vez que se hace clic, ya que si la URL es la siguiente http:://thpsvido.com/videos/thps4/4 entonces deberíamos de cargar sólamente un video, y ese sería el que esté en la posición 4. Otro ejemplo, si la dirección es la siguiente: http:://thpsvido.com/videos/thps4/5, entonces debería de devolver el de la posición 5.

No importa cual sea el número que aparezca en la URL, por ejemplo, puede ser: http://thvid-api.herokuapp.com/videos/game/THPS4/$id/2, aquí se cargan 2 videos debería de ver sólamente 1, el de la posición 2.

Si hago un dd($thps4Videos) en mi función y le doy clic al video que sea, siempre me devuelve el mismo video en el array.

Un array dentro de la colección tiene estas columnas:

array:1 (▼
  0 => array:8 (▼
    "_id" => "605a43ea667cd39060f435ac"
    "Title" => "THPS4 Rewind: Summer Of 2003 Unreleased (Edited by Maxfli)"
    "Game" => "THPS4"
    "ID" => "Qxd7D1KN1No"
    "Thumbnail" => "https://i.ytimg.com/vi_webp/Qxd7D1KN1No/maxresdefault.webp"
    "newduration" => "00:22:53"
    "category" => "gameplay"
    "updatedAt" => "2021-04-12T17:45:27.167Z"
  )
)

No tengo ningun error en cuanto a excepciones o mensajes de error.

Estoy utilizando una librería Javascript llamada VideoJS, versión 7.10.2, estoy usando Mozilla Firefox en Windows 10. También estoy utilizando la extensión de Youtube de esta misma librería.
VideoJS: https://github.com/videojs/video.js
Youtube extension: https://github.com/videojs/videojs-youtube

La API recolecta estos datos de Youtube.

¿como hacer que el scroll siempre se posicione en la parte superior en angular?

tengo un componente #1, donde uso routerlink para navegar al componente #2, este es es el componente #1 ( donde está el routerlink):

    <div class="content-descripcion">
        <h3 class="title color-grey">{{data.info.nombre_producto}}</h3>
        <p class="sku">SKU: <span class="text">{{data.info.codigo_producto}}</span></p>
        <p class="descripcion color-grey">{{data.info.descripcion_corta}}</p>
        <span class="button-ver-mas" (routerLink)="('/detalle-producto')" (queryParams)="{ id: data.info.id_productos, producto: data.info.nombre_producto }"  mat-dialog-close>Ver más</span>

        <div class="content-precio">        
            <span class="precio color-grey" *ngIf="data.info.oferta === 0; else elseOferta">${{data.info.precio | precios}}</span>
            <ng-template #elseOferta>
                <div class="oferta">
                    <span class="precio color-grey" *ngIf="data.info.oferta === 1">${{data.info.precio_oferta | precios}}</span>
                    <p class="descripcion-precio">Antes: <span class="precio-anterior">${{data.info.precio | precios}}</span></p>
                    <p class="descripcion-precio">Descuento: <span class="descuento">-${{(data.info.precio - data.info.precio_oferta) | precios}}</span></p>
                </div>
            </ng-template>
        </div>

        <div class="content-options">
            <div class="buttons-left">
                <span class="stock color-grey"><span class="text color-grey">Stock:</span>{{data.info.stock}}</span>
                
                <button class="button button-icon" (click)="agregarALoQuiero(data.info.id_productos)"><i class="fas fa-heart"></i></button>
                <button class="button button-comparar button-icon" (click)="agregarAComparar(data.info)"><i class="fas fa-sync-alt"></i></button>
            </div>
            <div class="buttons-rigth">
                <span class="stock">
                    <i *ngIf="cantidad < data.info.stock; else elseDisabledUp" class="fas fa-sort-up color-grey" (click)="valorCantidad(1)"></i>
                    <ng-template #elseDisabledUp><i class="fas fa-sort-up disabled"></i></ng-template>
                    <span class="value color-grey">{{cantidad}}</span>
                    <i *ngIf="cantidad > 1; else elseDisabledDown" class="fas fa-sort-down color-grey" (click)="valorCantidad(-1)"></i>
                    <ng-template #elseDisabledDown><i class="fas fa-sort-down disabled"></i></ng-template>
                </span>
                <button class="button" (click)="agregarAlCarrito(data.info.id_productos)">AÑADIR <img src="https://es.stackoverflow.com/./assets/iconos/icono-bolsa.png"></button>
            </div>
        </div>

    </div>

el problema está en que al navegar al otro componente, siempre se va al final del scroll (no se por qué), entonces buscando soluciones, encontré esto lo cuál coloqué en el constructor del componente #2 (donde el scroll se va hacia abajo):

    router.events.subscribe(event => { //para posicionar el scroll arriba cada vez que se llama al routerlink
      // if (event instanceof NavigationEnd) {
        setTimeout(() => {
          document.documentElement.scrollTop = 0; // || window.scrollTo(0, 0);
        }, 190);
      // }
    });

Pues, resulta que en pc funciona, pero cuándo lo pruebo desde un teléfono, no funciona, lo que hace es que la primera vez que navego desde el componente #1 al componente #2 se posiciona al final, si luego regreso al componente #1 y vuelvo de nuevo al componente #2 se posiciona donde haya dejado el scroll anteriormente, es decir, si la primera vez que navegué del componente #1 al componente #2 deje el scroll arriba, entonces está es la unica forma de que al volver a haver click en el router link vaya al componente #2 con el scroll arriba, de lo contrario no. Intenté probar con el scrollPositionRestoration pero me muestra un error. Gracias de antemano al que me pueda ayudar, he visitado bastantes opciones y hasta ahora nada me funciona.

php – Nunca ejecuta el bloque dentro de “else”, la funcion siempre devuelve el mismo valor

estoy bastante desesperado por que por mas que intento no consigo que este login muestre el bloque correcto cuando el usuario y la contraseña son correctas, he probado a ejecutarlo sin comprobación y todo funcionaba por lo que asumo que el fallo tiene que estar en la función que realiza la comprobación pero no encuentro que podría estar saliendo mal.

CODIGO PHP

 
$tablaUsuarios=(
        'admin'=>'1234',
        'david'=>'david',
        'angela'=>'angela'
    );
 
function comprobarUsuario(){
        
        if (isset($GLOBALS('data'))){
            $_usuario=compruebaTexto('usuario');
            $_pass=compruebaTexto('pass');

            //Tengan un minimo de caracteres
            if (strlen($_usuario)>3 && strlen($_pass)>3){
                foreach($GLOBALS('tablaUsuarios') as $regUser=>$regPass){
                    //Comprobamos usuario y contraseña
                    if ($regUser == $_usuario && $regPass == $_pass)
                        return true;
                }
            }
        }
        return false;
    }
    ?>
</head>
<body>
    <?php if(!comprobarUsuario()) { ?>
        
        <form action="<?php echo $_SERVER('PHP_SELF') ?>" method="post">
            Usuario: <input type="text" name="usuario"><br>
            Contraseña: <input type="password" name="pass"><br>
            <input type="submit" name="submit" value="Login">
            
        </form>
   
    <?php } else { ?>

El problema es que ponga lo que ponga en los campos del formulario aunque coincidan con los que figuran en el array de $tablaUsuarios siempre ejecuta la sentencia if y nunca el else que debería aparecer cuando coinciden los campos con el array.

c++ – Función Booleana recursiva me devuelve siempre False

bool Arbol::enArbolR(nodoArbol * nodoActual,string _titulo){
    if (nodoActual != NULL){
       enArbolR(nodoActual -> izq,_titulo);
       enArbolR(nodoActual -> der,_titulo);
       if (iguales(_titulo,nodoActual->book.GetTitulo()))
            return true;
    }else return false;
}

La función iguales la testee en un programa aparte y funciona, también probé poniéndole return a las llamadas recursivas de enArbolR y aun así me devuelve siempre false.

Se que en el árbol tengo que comparar si (titulo<árbol.titulo) y luego llamo a la función recursiva, pero el árbol no esta ordenado por titulo solamente tengo que recorrer todos los nodos del árbol fijándome si se encuentra el titulo.

En windows, al ordenar los archivos por nombre no siempre se me ordenan de la misma forma (cuando tienen números)

No sé si depende de la versión de Windows, de alguna configuración o de qué: tengo carpetas donde el nombre de los archivos es una palabra (siempre la misma) seguida de un número de varias cifras, necesito ordenar los archivos por nombre siguiendo siempre el mismo criterio, pero a veces me los ordena según el número completo y otras veces según el primer dígito. Ejemplo: los archivos se llaman M0, M90, M180, M270. Pues bien, cuando le doy a ordenar por nombre, a veces me los ordena en este orden:
M0
M90
M180
M270
y otras veces en este otro:
M0
M180
M270
M90.
No sé si tendrá algo que ver que los archivos pasen por varios ordenadores antes de llegar al mío, y cada uno con su versión de Windows. ¿Alguien sabe por qué demonios pasa esto y cómo puedo evitarlo?. Sé que una solución sería nombrar los archivos con un número que tuviera siempre los mismos dígitos, rellenando con ceros a la izquiera (M000, M090, M180, etc) pero por motivos que no vienen al caso eso no me resulta práctico.

oracle – ¿Como hago para que los datos que inserto en mi tabla se inserten siempre al final?

estoy teniendo un problema con oracle. Tengo una tabla muy simple llamada persona cuyos atributos son Documento, nombre,Nacionalidad y teléfono. Todos son varchar2 y la llave primaria es documento. Bueno, la cuestión es que cuando agrego a una persona a mi tabla se inserta en cualquier parte de la misma y necesito que siempre se agreguen al final de la tabla, para tener un orden claro. ¿Alguien sabe como puedo solucionar esto? Gracias.

nodejs – tengo que hacer 2 consultas en un get y mostrarlas en un res.json, pero siempre muestra una de las 2, esta es mi function

en la constante busqueda almaceno la palabra a buscar en los dos models usuarios y avisos, si encuentra
un campo que empieze o tenga la palabra buscada lo mostramos en un res.json.

function getTodo(req, res = response, next) {  
    const busqueda = req.params.busqueda;

    const regex = new RegExp(busqueda, 'i');

    Usuario.find({
       nombre: regex
    })

    .exec((err, usuarios) => {
        if (err) return errorHandler(err)
        console.log(usuarios)
     })


     Aviso.find( {
        nombre: regex
     }) 
    
     .exec((err, avisos) => {
         if (err) return errorHandler(err)
         console.log(avisos)
     })

     .then((usuarios, avisos) => {
         res.json({ usuarios, avisos })
     })
}

audio – Android Studio siempre abre el reproductor y me reproduce un sonido cuando pulso en Build ¿Cómo pararlo?

Añadí un sonido .ogg a una carpeta de “raw” como indica este tutorial

Inserción y reproducción de audio en Android

Android me dio a elegir el tipo de archivo que quería y marqué la segunda opción, la de que me lo abra mi equipo (es un archivo .ogg que me lo abre con VLC player)

Quería que de algún modo me vuelva a preguntar o bien yo seleccionar otra opción para que no me abra el reproductor cada vez que pulso en “Build”